2014-10-07 17 views
5

Tôi có một TableViewController tùy chỉnh với một TableViewCell tùy chỉnh. Tôi tạo ra một segue trên storyboard từ Cell để ViewController khác để hiển thị các chi tiết nhưng preparForSegue không bao giờ được gọi. Tôi đã thử bằng cách sử dụng didSelectRowAtIndexPath nhưng nó không được gọi là một trong hai. Tôi nghi ngờ nó có thể là bởi vì tôi tạo ra các tế bào tùy chỉnh động và họ không nhận được segue từ storyboard giao cho họ, nhưng tôi không thể tìm thấy một cách để làm như vậy. "NewSegue" từ BarButtonItem của tôi được gọi là bình thường.PrepareForSegue không được gọi từ uitableviewcell tùy chỉnh

override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) { 
    println("PREPARE FOR SEGUE") 
    if segue.identifier == "newSegue" { 
     println("PREPARE FOR NEW SEGUE") 
    } else if segue.identifier == "detailSegue" { 
     println("PREPARE FOR DETAIL SEGUE") 
    } 
} 

override func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) { 
    println("You selected cell!") 
} 

tôi nghi ngờ tôi có thể làm điều gì sai khi xác định các tế bào tùy chỉnh của tôi:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    let CellIndentifier: NSString = "ListPrototypeCell" 

    var cell : MyTableViewCell = tableView.dequeueReusableCellWithIdentifier(CellIndentifier) as MyTableViewCell 

    var myClass: MyClass = self.myList.objectAtIndex(indexPath.row) as MyClass 

    cell.setCell(author: myClass.author, message: myClass.message) 

    return cell 

} 

Bất kỳ sự giúp đỡ?

+0

Bạn đã thiết lập bộ điều khiển nơi mã này cư trú như các đại biểu về quan điểm bảng (nó nên được thiết lập tự động nếu lớp học của bạn là một lớp con của UITableViewController)? Bạn có chế độ xem trong ô có thể chặn các lần chạm không? – rdelmar

+0

Có, tôi đã đặt làm đại biểu. Ô có chế độ xem tùy chỉnh nhưng không thể tạo khoảng cách từ chế độ xem cũng như nhãn. – filipebarretto

+0

Bạn phải kết nối từ chính ô đó chứ không phải là chế độ xem nội dung hoặc nhãn. Nếu bạn không thể lấy các tế bào từ vải, sau đó đi đến danh sách cảnh bên trái, và kéo từ các tế bào ở đó. – rdelmar

Trả lời

3

Kéo phân đoạn từ TableViewController trong InterfaceBuilder, không phải từ ô. Sau đó, bạn có thể thực hiện segue với mã định danh của nó trong didSelectRowAtIndexPath qua performSegueWithIdentifier.

Đồng thời kiểm tra chữ ký chức năng. Các dấu chấm than cho optionals ngầm nào không còn cần thiết:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    let cell = tableView.cellForRowAtIndexPath(indexPath) 
    tableView.deselectRowAtIndexPath(indexPath, animated: true) 
    performSegueWithIdentifier("mySegue", sender: cell) 
} 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
} 
+1

Đây là một công việc xung quanh, không phải là một giải pháp cho vấn đề của OP. Điều này sẽ không làm việc bất kỳ cách nào, kể từ khi OP nói rằng didSelectRowAtIndexPath không được gọi. – rdelmar

+0

Tôi cũng đã cố gắng aproach này, nhưng, như tôi lo ngại, didSelectRowAtIndexPath không được gọi. Ô được định nghĩa tại MyTableViewCell.swift. Tôi không biết nếu điều này có thể gây ra vấn đề. – filipebarretto

+0

Chữ ký 'didSelectRowAtIndexPath' của bạn không đúng, do đó nó không được gọi. Kiểm tra mã mẫu của tôi ở trên. Bạn phải xóa dấu chấm than. Chữ ký mã đã thay đổi giữa giai đoạn beta của Xcode và hoàn thành mã tự động vẫn không chính xác. – zisoft

Các vấn đề liên quan