2014-06-30 2 views
0

У меня есть вопрос о стриже,Обновление Этикетки в Swift при использовании popoverController

Я сделал контроллер поповера в UIViewController, который отобразить список книг и когда пользователь нажимает на одну из книг, этикеток на viewController должно быть обновлено имя выбранной книги.

Но в моем случае, когда я выбираю имя книги, этикетка не обновляет

вот код:

// View Controller 

import UIKit 

class ViewController: UIViewController,UIPopoverControllerDelegate { 
    var popoverController : UIPopoverController? = nil 
    @IBOutlet var bookName : UILabel 
    var BookNameString : String?{ 
    didSet{ 
     configureView() 
    } 
    } 

    func configureView() { 
     // Update the user interface for the detail item. 
     if let detail = self.BookNameString { 
      if let label = bookName { 
       label.text = detail 
      } 
     } 
    } 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
    } 
    @IBAction func Click(sender : UIButton) { 
     var tableView:TableViewController = TableViewController(style: UITableViewStyle.Plain) 
     var popoverContent:UINavigationController = UINavigationController(rootViewController: tableView) 
     self.popoverController = UIPopoverController(contentViewController: popoverContent) 
     self.popoverController!.delegate = self 
     self.popoverController!.presentPopoverFromRect(sender.frame, inView: self.view, permittedArrowDirections: UIPopoverArrowDirection.Any, animated: true) 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 
} 

и вот код TableViewController когда строка отмеченный:

// TableViewController 

override func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!){ 

    var storyboard = UIStoryboard(name: "Main", bundle: nil) 
    var details = storyboard.instantiateViewControllerWithIdentifier("ViewController") as ViewController 


    var keyString = bookSectionKeys[indexPath.section] 
    var bookValues = book.booksLetters[keyString]! 
    var selectedBookString = bookValues[indexPath.row] 
    var selectedBookValues = book.bookDictionary[selectedBookString]! 

    details.BookNameString = selectedBookString 


} 

ответ

0

Я был в состоянии решить эту проблему, несколько недель назад, и я хочу поделиться с вами решением :)

Я решаю его, используя протоколы.

ОК Вот что я сделал в деталях:

  1. Сначала я создал протокол в представлении, что я хочу, чтобы отобразить внутри пирог, и я назвал протокол «DismissPopoverDelegate»

    protocol DismissPopoverDelegate{ 
         func didSelectBook(SelectedBook:String) 
    }  
    
  2. Тогда я объявил переменную типа DismissPopoverDelegate и назовите его «делегат»

    var delegate: DismissPopoverDelegate? 
    
  3. Тогда в didSelectRowAtIndexMethod:

    override func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!){ 
    var keyString = bookSectionKeys[indexPath.section] 
    var bookValues = book.booksLetters[keyString]! 
    var selectedBookString = bookValues[indexPath.row] 
    delegate?.didSelectBook(selectedBookString) 
    } 
    
  4. После этого внутри вида, который содержит поповер (View Controller), я поставил делегат зрения:

    class ViewController: UIViewController, DismissPopOverDelegate, UIPopoverControllerDelegate{ 
    
  5. Затем, чтобы сделать вид подтвердить в DismissPopOverDelegate протокола, я реализовать метод "didSelectBook" Внутри зрения:

    func didSelectBook(SelectedBook:String){ 
        popoverController!.dismissPopoverAnimated(true) // This is Optional 
        bookName.text = SelectedBook // Make the label text equal to the selected book From the table 
    } 
    
  6. Наконец, я поставил делегата на Tableview в View Controller

    tableView.delegate = self 
    

Вот это :)

Вот полный код ViewController, который содержит поповер

import UIKit 

class ViewController: UIViewController, DismissPopOverDelegate, UIPopoverControllerDelegate{ 
    @IBOutlet var booksbarButton : UIBarButtonItem 
    @IBOutlet var bookName : UILabel  
    var popoverController : UIPopoverController? = nil 
    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 
    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
    } 
    @IBAction func showTableView(sender : UIBarButtonItem) { 
     var tableView:TableViewController = TableViewController(style: UITableViewStyle.Plain) 
     tableView.delegate = self 
     var popoverContent:UINavigationController = UINavigationController(rootViewController: tableView) 
     self.popoverController = UIPopoverController(contentViewController: popoverContent) 
     popoverController!.delegate = self 
     self.popoverController!.presentPopoverFromBarButtonItem(booksbarButton, permittedArrowDirections: UIPopoverArrowDirection.Any, animated: true) 
    } 
    func didSelectBook(SelectedBook:String){ 
     popoverController!.dismissPopoverAnimated(true) 
     bookName.text = SelectedBook 
    } 
} 
Смежные вопросы