2015-06-11 19 views
27

Tôi có onClick chức năng saumở mới View Controller bằng cách nhấn vào tế bào trong Bảng View - Swift iOS

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

    tableView.deselectRowAtIndexPath(indexPath, animated: true) 

    let row = indexPath.row 
    println("Row: \(row)") 

    println(meetingArray[row] as! String) 

} 

mà in ra văn bản trên di động mà được nhấp. Nó hoạt động tốt.

Tôi chỉ tự hỏi làm thế nào bạn sẽ thiết lập một chức năng mà sẽ chỉ dẫn bạn tới bộ điều khiển xem mới

Trả lời

49

lập trình:

let destination = UIViewController() // Your destination 
navigationController?.pushViewController(destination, animated: true) 

Storyboard:
Trước tiên, bạn sẽ phải để đặt số nhận dạng cho chế độ xem của bạn. Trong ảnh chụp màn hình bên dưới, bạn có thể xem vị trí nhập mã nhận dạng.

screenshot

Sau đó, bạn có thể tạo ra một "điểm đến" và đẩy nó tới bộ điều khiển chuyển hướng bằng cách sử dụng mã bên dưới:

let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main) 
let destination = storyboard.instantiateViewController(withIdentifier: "YourViewController") as! YourViewController 
navigationController?.pushViewController(destination, animated: true) 

Segue:
Trước tiên, bạn sẽ phải để đặt số nhận dạng cho khoảng cách của bạn như được hiển thị bên dưới:

segue1

segue2

performSegue(withIdentifier: "segue", sender: self) 

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "segue" { 
     // Setup new view controller 
    } 
} 

EDIT: Cập nhật cho Swift 3.x

+0

Xin lỗi vì sự thiếu kinh nghiệm của tôi. Làm cách nào để chỉ định Trình điều khiển xem mà tôi gán cho hằng số 'đích'? –

+0

Bạn có tạo bộ điều khiển xem trong bảng phân cảnh hoặc theo chương trình không? – Eendje

+0

Chỉ cần sử dụng bảng phân cảnh. Tôi rất mới với điều này và tôi đang cố giữ nó đơn giản nhất có thể. Cảm ơn đã giúp đỡ. –

7

Trong kịch bản, thiết lập storyboardId của viewController của bạn trong Identity Inspector.

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

tableView.deselectRowAtIndexPath(indexPath, animated: true) 

let row = indexPath.row 
println("Row: \(row)") 

println(meetingArray[row] as! String) 

let secondViewController = self.storyboard.instantiateViewControllerWithIdentifier("storyBoardIdFor your new ViewController") as SecondViewController 

self.navigationController.pushViewController(secondViewController, animated: true) 

} 
+0

Sử dụng loại không khai báo 'SecondViewController', điều gì sẽ là lý do cho lỗi này? –

+0

thay thế SecondViewController bằng bất kỳ bộ điều khiển viewController.your mới nào của bạn! –

+0

Tôi yêu storyboardID, nó làm cho mã có thể đọc được. –

0

nếu sử dụng,

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) 

Giá trị của hàng đã chọn vượt qua một bộ điều khiển xem quá muộn. Bạn muốn tốt hơn để vượt qua các hàng đã chọn trong func prepareForSegue như dưới đây, lúc đầu, khai báo một biến toàn cầu để vượt qua giá trị cho khác viewController

var globalVar:Int 

Trong một ứng dụng kịch bản dựa trên, bạn thường sẽ muốn làm một sự chuẩn bị chút trước khi chuyển hướng

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     // Get the new view controller using segue.destinationViewController. 
     // Pass the selected object to the new view controller. 
     let selectedIndex = self.tableView.indexPathForCell(sender as! UITableViewCell) 
     globalVar = selectedIndex!.row 
     print("tableView prepareForSegue: " + String(globalVar)) 

    } 
1

Đối với những người dùng khác đến câu hỏi này, nếu bạn có một tế bào tĩnh trong một UITableViewController, bạn có thể chỉ kiểm soát kéo từ ce sẽ đến Trình điều khiển Chế độ xem mới.

enter image description here

Bạn cũng có thể làm điều này trên tế bào động nếu bạn không cần phải vượt qua bất kỳ dữ liệu vào View Controller tiếp theo.Tuy nhiên, nếu bạn cần truyền dữ liệu thì bạn nên make the segue from the Table View's view controller itself and not the cell. Sau đó gọi segue theo chương trình.

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    self.performSegue(withIdentifier: "mySegueIdentifier", sender: self) 
} 
+0

chỉ cần kéo từ một ô tĩnh dường như không hoạt động đối với tôi. Tôi đang sử dụng phân đoạn "Hiển thị" đơn giản. Tôi cũng đã cố gắng để xác định nó như là "hành động phụ kiện" ("chỉ báo tiết lộ" trong trường hợp của tôi), không có ích – Antek

+0

ok, rõ ràng là mẹo là sử dụng bộ điều khiển điều hướng làm cha mẹ cho bộ điều khiển bảng – Antek

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