아래에서 교환한 후, Swift는 TableView를 다시 불러오고, Parse에서 데이터를 업데이트합니다. (Swift, Xcode 6beta 5, Parse, UItableView)

16482 단어 XcodeSwift

A. 개요

  • iOS의 기본'하향 스트레칭 후 재부팅'
  • 을 Swift로 써봤어요.
  • 중재된 내용은 전체 TableView
  • Navigation Bar Buton에서도 업데이트 버튼 추가

  • (위의gif에서는Parse에서 새로운 데이터를 등록한 후에 업데이트를 하고 등록된 데이터가 반영된 애니메이션이 있는지 확인합니다.)

    B. 환경

  • Swift
  • Xcode6 beta5
  • Parse.com
  • C. Github

  • 이 글의 내용을 사용한 항목 -> SwiftAndParseApp
  • 이 글에 대한 제출->Add refreshing functions
  • 1. Parse에서 데이터를 읽는 함수 만들기

    class TimelineTableViewController: UITableViewController {
    
        var timelineData:NSMutableArray = NSMutableArray()
    
        required init(coder aDecoder: NSCoder!) {
            super.init(coder: aDecoder)
        }
    
        func loadData(){
            timelineData.removeAllObjects()
    
            // call databases
            var findTimelineData:PFQuery = PFQuery(className: "Tweets")
    
            findTimelineData.findObjectsInBackgroundWithBlock{
                (objects:[AnyObject]!, error:NSError!)->Void in
    
                if !error{
                    for object in objects{
                        self.timelineData.addObject(object)
                    }
    
                    let array:NSArray = self.timelineData.reverseObjectEnumerator().allObjects
                    self.timelineData = array as NSMutableArray
    
                    self.tableView.reloadData()
                }
            }
        }
    
        override func viewDidAppear(animated: Bool) {
    
            // Controller読み込み時にデータを取得。これは「下に引っ張って更新」とは関係無い。
            self.loadData()
            ...
        }
    

    2. "드롭다운 업데이트" 섹션 만들기


    timelineTableViewController.swift
    override func viewDidLoad() {
            super.viewDidLoad()
    
            // 下記を追加
            var refresh = UIRefreshControl()
            refresh.attributedTitle = NSAttributedString(string: "Loading...") // Loading中に表示する文字を決める
            refresh.addTarget(self, action: "pullToRefresh", forControlEvents:.ValueChanged)
    
            self.refreshControl = refresh
        }
    
        // 何を更新するのかを定義
        func pullToRefresh(){
            self.loadData() // 先ほど1で書いたParseからデータを取る関数を呼び出す
            refreshControl.endRefreshing() // データが取れたら更新を終える(くるくる回るViewを消去)
            self.tableView.reloadData() // tableView自身を再読み込み
            println("reload finised")
    
        }
    
  • 마지막 self.tableView.reloadData()를 쓰지 않으면 데이터를 고치기 전에 Loading의 View가 사라지고 붕괴됩니다.
  • 3. tableView와 연결된 기타 코드


    timelineTableViewController.swift
    
        override func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int {
            // #warning Incomplete method implementation.
            // Return the number of rows in the section.
            // データの数だけrowを返す
            return timelineData.count
        }
    
    
        override func tableView(tableView: UITableView?, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
            let cell:TweetTableViewCell = tableView!.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as TweetTableViewCell
    
            let tweet:PFObject = self.timelineData.objectAtIndex(indexPath!.row) as PFObject
    
            // デザイン部分
            cell.tweetTextView.alpha = 0
            cell.timestampLabel.alpha = 0
            cell.usernameLabel.alpha = 0
    
            // Tweetの内容をParse.comから取得
            cell.tweetTextView.text = tweet.objectForKey("content") as String
    
            var dataFormatter:NSDateFormatter = NSDateFormatter()
            dataFormatter.dateFormat = "yyyy-MM-dd HH:mm"
            cell.timestampLabel.text = dataFormatter.stringFromDate(tweet.createdAt)
    
            // objectIdをforeignKeyとして、user(tweeter)を取得
            var findTweeter:PFQuery = PFUser.query()
            findTweeter.whereKey("objectId", equalTo: tweet.objectForKey("tweeter").objectId)
    
            findTweeter.findObjectsInBackgroundWithBlock{
                (objects:[AnyObject]!, error:NSError!)->Void in
                if !error{
                    let user:PFUser = (objects as NSArray).lastObject as PFUser
                    cell.usernameLabel.text = "@\(user.username)"
    
    
                    // CELLの表示を少しずつずらす
                    UIView.animateWithDuration(0.5, animations: {
                        cell.tweetTextView.alpha = 1
                        cell.timestampLabel.alpha = 1
                        cell.usernameLabel.alpha = 1
                        })
                }
            }
    
            // Configure the cell...
    
            return cell
        }
    

    4. Navigation bar에 업데이트 버튼 추가

  • 스토리보드에 Bar Buton Item 추가
  • func loadData()에 추가@IBAction
  • timelineTableViewController.swift
    @IBAction func loadData(){ // ココを追加する
            timelineData.removeAllObjects()
    
            // call databases
            var findTimelineData:PFQuery = PFQuery(className: "Tweets")
    
            findTimelineData.findObjectsInBackgroundWithBlock{
                (objects:[AnyObject]!, error:NSError!)->Void in
    
                if !error{
                    for object in objects{
                        self.timelineData.addObject(object)
                    }
    
                    let array:NSArray = self.timelineData.reverseObjectEnumerator().allObjects
                    self.timelineData = array as NSMutableArray
    
                    self.tableView.reloadData()
                }
            }
        }
    
  • 컨트롤 + 스토리보드에 추가된 Bar Buton Item을 클릭하여 위 코드로 드래그하면 됩니다
  • D. 관련 보도

  • 이 글의 업데이트 방법을 실제 사용한 프로젝트
  • mbaS 써주세요!트위터에 쓰는 메일박스 기능(Xcode6beta5,Parse.com)을 Swift로 아주 간단하게 만들기(Xcode6beta5,Parse.com)
  • Swift & Parse를 사용한 사용자 로그인, 로그인, 로그아웃 (Swift, Xcode 6beta5, Parse)
  • 기타 Swift로 제작된
  • Swift의 Notification에서 Hello, World, 3개의 동작을 시도했다(Xcode6beta4)
  • Swift로 To Do 목록(Xcode6beta4Tabbed Application, UItableView, UITExtField)을 만들었습니다.
  • 좋은 웹페이지 즐겨찾기