2015-05-31 32 views
0

問題是這樣的:我嘗試了很多方法從SecondViewController傳遞信息到ViewController1。在這第一個ViewController1中,我有一個tableView,並且在這個tableView中,每個單元格都會收到一個圖像和一個標籤。我想要做的是在SecondViewController中,我將在textField中寫入一些東西,並選取一些隨機圖像並將其顯示在ViewController1中。將信息傳遞給自定義TableViewCell - Swift

有人能告訴我該怎麼做嗎?我試過委託,dequeuereusablecell和數據將不會顯示在單元格中。

提前致謝!

編輯

這裏是我的代碼:

的ViewController 1:

進口的UIKit

類FirstViewController:UIViewController的,的UITableViewDelegate,UITableViewDataSource,sendDataToFVCDelegate {

@IBOutlet var tableView: UITableView! 
var labelsListArray = [""] 

    override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
} 

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


func myVCDidFinish(text: String) { 
    labelsListArray.append(text) 
    tableView.reloadData() 
} 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return labelsListArray.count 
} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let row = indexPath.row 
    let textLabel = labelsListArray[row] 
    var cell = tableView.dequeueReusableCellWithIdentifier("ImageView") as? CustomCellTableViewCell 
    cell!.cellLabel!.text = textLabel 
    return cell! 
} 

}

的ViewController 2:

進口的UIKit

協議sendDataToFVCDelegate { FUNC myVCDidFinish(文本:字符串) }

類SecondViewController:UIViewController的{

var delegate:sendDataToFVCDelegate? 
@IBOutlet var textField: UITextField! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Do any additional setup after loading the view. 
} 

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

@IBAction func addButton(sender: AnyObject) { 

    if textField == nil { return } 
    let name = textField.text 
    println("\(name)") 

    if delegate == nil { return } 
    delegate?.myVCDidFinish(name) 

    if let navigation = self.navigationController { 
     navigation.popViewControllerAnimated(true) 
    } 
} 

}

TableViewCell:

進口的UIKit

類CustomCellTableViewCell:{UITableViewCell的

@IBOutlet var cellImage: UIImageView! 
@IBOutlet var cellLabel: UILabel! 



override func awakeFromNib() { 
    super.awakeFromNib() 
    // Initialization code 
} 

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

    // Configure the view for the selected state 
} 

}

我在做什麼錯?現在即使是「popViewControllerAnimated」行也會回到第一個視圖控制器。

非常感謝您的幫助!

+0

使用委託模式是正確的。發佈您的代碼,以便我們可以看到出了什麼問題。 – Dash

+0

我刪除了我的整個代碼。可以發表任何簡單的例子來說明如何做到這一點?也許我錯過了一個細節或任何東西。我會很高興 –

+0

我有一個簡單的項目,可以做類似於你需要的東西:https://github.com/maurovz/MarvelAPIExample – MXV

回答

0

所以您的自定義TableViewCell應該有它自己的類(例如ImageTableViewCell)這需要加載的TableView時,你會設置圖像的護理:

@IBOutlet var titleLabel: UILabel! 
@IBOutlet var imageView: UIImageView! 

和TableView中:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     var cell = tableView.dequeueReusableCellWithIdentifier("ImageView") as? ImageTableViewCell 
     cell!.titleLabel!.text = textFrom2VC 
     cell!.imageView.image = imageFrom2VC 
     return cell! 
} 

你必須從委託人的另一個視角獲得這些。在第二個VC你有

protocol SecondVCDelegate{ 
    func myVCDidFinish(controller:SecondVC, text: String, image: UIImage) 
} 

您與

var delegate:SecondVCDelegate.myVCDidFinish(self, text: "this is random text", image: (your image)) 

,並在第一(這證實到協議SecondVCDelegate)打電話給你有

func myVCDidFinish(controller: SecondVC, text: String, image: UIImage) { 
    textFrom2VC = text 
    imageFrom2VC = image 
    controller.navigationController?.popViewControllerAnimated(true) 
    self.tableView.reloadData() 
} 
+0

太棒了!我會嘗試並提供反饋! –

+0

我做了代碼。任何想法? –

+0

您將代理設置爲可選,使其成爲零,然後您只是將其設置爲**而不是**零,這沒有任何意義。所以如果你刪除'if delegate == nil {return}'我認爲它應該可以工作... – Michael