ID StoryBoard là gì và tôi có thể sử dụng ID này như thế nào?


110

tôi là người mới phát triển IOS và gần đây đã bắt đầu trong Xcode 4.5. Tôi thấy đối với mọi viewController rằng tôi có thể đặt một số biến nhận dạng bao gồm cả ID bảng phân cảnh. Đây là gì và tôi có thể sử dụng nó như thế nào?

nhập mô tả hình ảnh ở đây

Tôi bắt đầu tìm kiếm trên stackoverflow và không thể tìm thấy bất kỳ lời giải thích nào cho nó. Tôi cho rằng đó không chỉ là một số nhãn ngu ngốc mà tôi có thể đặt để ghi nhớ bộ điều khiển của mình phải không? Nó làm gì?

Câu trả lời:


132

ID bảng phân cảnh là trường Chuỗi mà bạn có thể sử dụng để tạo một ViewController mới dựa trên ViewController bảng phân cảnh đó. Một ví dụ sử dụng sẽ là từ bất kỳ ViewController nào:

//Maybe make a button that when clicked calls this method

- (IBAction)buttonPressed:(id)sender
{
    MyCustomViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"MyViewController"];

   [self presentViewController:vc animated:YES completion:nil];
}

Thao tác này sẽ tạo MyCustomViewController dựa trên ViewController của bảng phân cảnh mà bạn đặt tên là "MyViewController" và trình bày nó phía trên View Controller hiện tại của bạn

Và nếu bạn là đại biểu ứng dụng của mình, bạn có thể sử dụng

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard"
                                                         bundle: nil];

Chỉnh sửa: Swift

@IBAction func buttonPressed(sender: AnyObject) {
    let vc = storyboard?.instantiateViewControllerWithIdentifier("MyViewController") as MyCustomViewController
    presentViewController(vc, animated: true, completion: nil)
}

Chỉnh sửa cho Swift> = 3:

@IBAction func buttonPressed(sender: Any) {
    let vc = storyboard?.instantiateViewController(withIdentifier: "MyViewController") as! ViewController
    present(vc, animated: true, completion: nil)
}

let storyboard = UIStoryboard(name: "MainStoryboard", bundle: nil)

Hãy thử điều đó và làm cách nào để bạn nhận đượcself.storyboard
RTB

self.storyboard có thể được truy cập từ bất kỳ bộ điều khiển chế độ xem nào. Tôi sẽ chỉnh sửa câu trả lời của mình ngay bây giờ để bạn có thể xem
Eric

Và điều gì xảy ra nếu cần để truy cập nó từ AppDelegate của tôi hoặc bất kỳ lớp nào khác?
RTB

Đã thêm một chỉnh sửa khác hiển thị cách truy cập bảng phân cảnh từ bất kỳ tệp nào.
Eric

1
self.storyboardcó thể được truy cập từ bất kỳ bộ điều khiển chế độ xem nào được tải từ bảng phân cảnh. Nếu bộ điều khiển chế độ xem không được tải từ bảng phân cảnh, thuộc tính đó là nil.
cướp mayoff 13/12/12

13

Để thêm vào câu trả lời của Eric và cập nhật nó cho Xcode 8 và Swift 3:

ID bảng phân cảnh thực hiện chính xác những gì tên ngụ ý: nó xác định. Chỉ là nó xác định một bộ điều khiển chế độ xem trong tệp bảng phân cảnh. Đó là cách bảng phân cảnh biết bộ điều khiển chế độ xem nào.

Bây giờ, đừng nhầm lẫn bởi cái tên. ID bảng phân cảnh không xác định được 'bảng phân cảnh'. Bảng phân cảnh, theo tài liệu của Apple, 'đại diện cho các bộ điều khiển chế độ xem cho tất cả hoặc một phần giao diện người dùng của ứng dụng của bạn.' Vì vậy, khi bạn có một cái gì đó giống như hình dưới đây, bạn có một bảng phân cảnh tên là Main.storyboard có hai bộ điều khiển chế độ xem, mỗi bộ điều khiển có thể được cấp một ID bảng phân cảnh (ID của chúng trong bảng phân cảnh).

nhập mô tả hình ảnh ở đây

Bạn có thể sử dụng ID bảng phân cảnh của bộ điều khiển chế độ xem để khởi tạo và trả lại bộ điều khiển chế độ xem đó. Sau đó, bạn có thể tiếp tục thao tác và trình bày nó theo cách bạn muốn. Để sử dụng ví dụ của Eric, giả sử bạn muốn trình bày một bộ điều khiển chế độ xem với số nhận dạng 'MyViewController' khi một nút được nhấn, bạn sẽ làm theo cách này:

@IBAction func buttonPressed(sender: Any) {
    // Here is where we create an instance of our view controller. instantiateViewController(withIdentifier:) will create an instance of the view controller every time it is called. That means you could create another instance when another button is pressed, for example.
    let vc = storyboard?.instantiateViewController(withIdentifier: "MyViewController") as! ViewController
    present(vc, animated: true, completion: nil)
}

Hãy lưu ý những thay đổi trong cú pháp.


Biểu tượng cảnh báo màu vàng cho biết là do bộ điều khiển chế độ xem thứ hai không có điểm vào và / hoặc ID. Điều này có thể được giải quyết bằng cách cấp cho nó một ID bảng phân cảnh hoặc kết nối nó với một bộ điều khiển chế độ xem khác trong bảng phân cảnh. Bằng cách đó, bảng phân cảnh biết cách tiếp cận và xác định nó.
Taiwosam

Tôi không thể tìm thấy trường ID Bảng phân cảnh, vì vậy, cảm ơn vì bức ảnh. Nó ở cùng một vị trí trên Xcode 9.
Isaac Bosca
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.