2016-07-18 3 views
1

途中で迅速に回答が必要です。基本的に、私はリフレッシュのための2つの質問があります。コードが長すぎて見ることができないと思うなら、これが私がやろうとしていることです。 1つは、テーブルビューセルの1つで削除ボタンをクリックした後にテーブルビューをリフレッシュすることです。私はrefreshcontrolを試してみました、それはうまくいかなかったし、私が望んでいたものではありませんでしたが、それらを持っていることは涼しいでしょう。私の他の質問は、ボタンをクリックしてView Controllerをリフレッシュする方法です。そしてここにコードがあります。テーブルビューのセルを削除してビューコントローラをリフレッシュした後にテーブルビューをリフレッシュ

削除ボタンは私のカスタムセルクラス クラスpostCellの内側にある:UITableViewCellの{

@IBOutlet weak var deleteBtn: UIButton! 
@IBOutlet weak var postImg: UIImageView! 
@IBOutlet weak var category: UILabel! 
@IBOutlet weak var location: UILabel! 
@IBOutlet weak var title: UILabel! 
@IBOutlet weak var price: UILabel! 
var prices = String() 
var notes = String() 
var comments = String() 
var locations = String() 
var categories = String() 
var school = String() 
var username = String() 
var date = String() 


@IBAction func deleteAction(sender: AnyObject) { 
    let request = NSMutableURLRequest(URL: NSURL(string: "http://www.percyteng.com/orbit/deletePost.php")!) 
    request.HTTPMethod = "POST" 
    let postString = "name=\(username)&location=\(locations)&price=\(prices)&notes=\(notes)&school=\(school)&category=\(categories)" 
    request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding) 

    let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { 
     data, response, error in 

     if error != nil { 
      print("error=\(error)") 
      return 
     } 

     print("response = \(response)") 

     let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding) 
     print("responseString = \(responseString)") 
    } 
    task.resume();   NSNotificationCenter.defaultCenter().postNotificationName("NotificationIdentifie‌​r", object: nil) 


} 

override func awakeFromNib() { 
    super.awakeFromNib() 
} 
override func setSelected(selected: Bool, animated: Bool) { 
    super.setSelected(selected, animated:animated) 
} 
} 

と私は別のクラス内のデータをリロードしたいテーブルビュー:

override func viewDidLoad() { 
    super.viewDidLoad() 
    username = tempUser.username 
    self.resultSearchController = ({ 
     let controller = UISearchController(searchResultsController: nil) 
     controller.searchResultsUpdater = self 
     controller.dimsBackgroundDuringPresentation = false 
     controller.searchBar.sizeToFit() 
     self.tableView.tableHeaderView = controller.searchBar 

     return controller 

    })() 
    get{(value) in 
     self.values = value 
     for ele in self.values{ 
      if self.username != ele["username"] as! String{ 
      } 
     } 
    } 
    self.tableView.reloadData() 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(serviceBoard.methodhandlingTheNotificationEvent), name:"NotificationIdentifie‌​r", object: nil) 

} 

func methodhandlingTheNotificationEvent(){ 
    tableView.reloadData() 
} 
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    if (self.resultSearchController.active && resultSearchController.searchBar.text != "") { 
     return self.filteredTableData.count 
    } 
    else { 
     return values.count 
    } 
} 
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as!postCell 
    let maindata = values[values.count-1-indexPath.row] 

    if (self.resultSearchController.active && resultSearchController.searchBar.text != "") { 


     //   if (filteredTableData[indexPath.row].rangeOfString("###") == nil){ 
     cell.postImg.image = UIImage(named:"tile_services") 
     cell.title.text = filteredTableData[indexPath.row] 
     cell.category.text = "SERVICES" 
     var price = String() 
     for i in values{ 
      if (i["title"] as? String)! == filteredTableData[indexPath.row]{ 
       price = (i["price"] as? String)! 
       cell.categories = "Services" 
       cell.username = i["username"] as! String 
       cell.prices = i["price"] as! String 
       cell.notes = i["notes"] as! String 
       cell.school = i["school"] as! String 
      } 
     } 
     cell.price.text = price 

     return cell 
    } 
    else { 
     if maindata["username"] as! String != username && username != "admin"{ 
      cell.deleteBtn.hidden = true 
     } 
     else{ 
      cell.categories = "Services" 
      cell.username = maindata["username"] as! String 
      cell.prices = maindata["price"] as! String 
      cell.notes = maindata["notes"] as! String 
      cell.school = maindata["school"] as! String 
     } 

     cell.postImg.image = UIImage(named:"tile_services") 
     cell.title.text = maindata["title"] as? String 
     cell.category.text = "SERVICES" 
     cell.price.text = maindata["price"] as? String 

     return cell 
    } 
} 
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    let popOverVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("showPostT") as! showPostT 
    self.addChildViewController(popOverVC) 
    popOverVC.view.frame = self.view.frame 
    self.view.addSubview(popOverVC.view) 
    popOverVC.didMoveToParentViewController(self) 
    if (self.resultSearchController.active && resultSearchController.searchBar.text != "") { 
     for i in values{ 
      if (i["title"] as? String)! == filteredTableData[indexPath.row]{ 
       popOverVC.type.text = "SERVICE" 
       popOverVC.typeImg.image = UIImage(named:"tile_services") 
       popOverVC.item.text = "Service: \(i["title"] as! String)" 
       popOverVC.price.text = "Price: \(i["price"] as! String)" 
       popOverVC.notes.text = "Notes: \(i["notes"] as! String)" 
       popOverVC.comments.text = i["comments"] as? String 
       popOverVC.postUser.text = i["username"] as! String 
       popOverVC.notesStr = i["notes"] as! String 
       popOverVC.category = "service" 
       popOverVC.pricesStr = i["price"] as! String 
       if username == popOverVC.postUser.text!{ 
        popOverVC.composeBtn.hidden = true 
       } 
      } 
     } 
    } 
    else{ 
     let maindata = values[values.count-1-indexPath.row] 
     popOverVC.type.text = "SERVICE" 
     popOverVC.typeImg.image = UIImage(named:"tile_services") 
     popOverVC.item.text = "Service: \(maindata["title"] as! String)" 
     popOverVC.price.text = "Price: \(maindata["price"] as! String)" 
     popOverVC.notes.text = "Notes: \(maindata["notes"] as! String)" 
     popOverVC.comments.text = maindata["comments"] as? String 
     popOverVC.postUser.text = maindata["username"] as! String 
     popOverVC.notesStr = maindata["notes"] as! String 
     popOverVC.category = "service" 
     popOverVC.pricesStr = maindata["price"] as! String 

     if username == popOverVC.postUser.text!{ 
      popOverVC.composeBtn.hidden = true 
     } 
    } 

} 

私はドン」私の2番目の質問にはコードが必要だと思うので、単にView Controllerをリフレッシュする方法を知りたいだけです。私は現在のコントローラを閉じてそれを再び開こうとしましたが、明らかに動作しません。

あなたが質問のいずれかを助けることができれば本当にありがとう!

ありがとうございました!

答えて

1

まず初めに、テーブルビューのデータを更新するには、モデルに変更があった場合に通知する必要があります。

tableView.reloadRowsAtIndexPaths(paths, withRowAnimation: UITableViewRowAnimation.None) 

または:あなたは全体のテーブルビューを再ロードする場合 はあなたが特定の行には、次の方法を使用しリフレッシュしたい場合は、

tableView.reloadData() 

を使用することができます (私は強く、それをしないことをお勧め)このメソッドは削除アクションに対してのみ使用できます。ボタンイベントをタップし、行を削除する信号をtableViewに送信します。 tableViewがこのシグナルを受け取ると、次のメソッドを渡します。

カスタムビューの再描画強制
tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic) 

view.setNeedsDisplay()

+0

何もしませんでしたそのアクション内でテーブルビューを参照できるようにしますか?テーブルビューがカスタムセルに定義されていない –

+0

https://en.wikipedia.org/wiki/Observer_pattern、NSNotificationCenter、KeyValueの監視またはReactivePrograming(Reactive Kit)https:// github .com/ReactiveKit/ReactiveKit –

+0

これは、カスタムセルを含むテーブルビューであることをサブジェクトに通知するためにカスタムセルの削除ボタンをクリックすると、通知センターに信号を送信するということですか?通知コードを共有してもよろしいですか? Thx –

0

リロードテーブルビューデータ

[_tableView reloadData];

+0

私は更新ボタンをクリックしたときにすることを試みたが、それは問題が私の削除ボタンアクションがどのように私だろう、私のカスタムセルであるということです –

関連する問題