Vấn đề của tôi là tôi đang tìm cách sử dụng cả hai bảng tính và xib. Nhưng tôi không thể tìm được cách thích hợp để tải và hiển thị bảng phân cảnh theo chương trình. Dự án đã được bắt đầu phát triển với xib, và bây giờ rất khó để làm tổ tất cả các tệp xib trong bảng phân cảnh. Vì vậy, tôi đã tìm kiếm một cách để làm điều đó trong mã, giống như với alloc, init, push
cho viewControllers. Trong trường hợp của tôi, tôi chỉ có một bộ điều khiển trong bảng phân cảnh: UITableViewController
, trong đó có các ô tĩnh với một số nội dung tôi muốn hiển thị. Nếu bất cứ ai biết cách thích hợp để làm việc cả với xib và storyboard mà không cần tái cấu trúc lớn, tôi sẽ đánh giá cao sự giúp đỡ nào.Làm cách nào để tải bảng phân cảnh theo chương trình?
Trả lời
Trong bảng phân cảnh của bạn, hãy truy cập Trình kiểm tra thuộc tính và đặt số nhận dạng của bộ điều khiển chế độ xem. Sau đó, bạn có thể trình bày bộ điều khiển xem đó bằng cách sử dụng mã sau đây.
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *vc = [sb instantiateViewControllerWithIdentifier:@"myViewController"];
vc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentViewController:vc animated:YES completion:NULL];
Trong thanh tra thuộc tính cung cấp cho các định danh cho rằng điều khiển xem và mã dưới đây làm việc cho tôi
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
DetailViewController *detailViewController = [storyboard instantiateViewControllerWithIdentifier:@"DetailViewController"];
[self.navigationController pushViewController:detailViewController animated:YES];
Hãy thử điều này
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *vc = [mainStoryboard instantiateViewControllerWithIdentifier:@"Login"];
[[UIApplication sharedApplication].keyWindow setRootViewController:vc];
Sử dụng điều này nếu bạn không sử dụng UINavigationController như được hiển thị trong các câu trả lời khác – latenitecoder
Swift 3
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "viewController")
self.navigationController!.pushViewController(vc, animated: true)
Swift 2
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewControllerWithIdentifier("viewController")
self.navigationController!.pushViewController(vc, animated: true)
Điều kiện tiên quyết
Gán một Storyboard ID để điều khiển xem của bạn.
IB> Hiển thị Identity thanh tra> nhận dạng> ID Storyboard
Swift (di sản)
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewControllerWithIdentifier("viewController") as? UIViewController
self.navigationController!.pushViewController(vc!, animated: true)
Edit: Swift 2 gợi ý trong một chú thích bởi Fred A.
Trong Swift 2, bạn không cần phải thêm "as? UIViewController", trình biên dịch sẽ tự động xác định nó –
hoặc bạn có thể thực hiện 'self.storyboard' và hợp nhất line1 & 2 – Honey
trong nhanh chóng
NavigationController và pushController bạn có thể thay thế cho
present(vc, animated:true , completion: nil)
Đối nhanh chóng 3 và 4, bạn có thể làm điều này. Thực hành tốt là đặt tên Storyboard bằng StoryboardID.
enum StoryBoardName{
case second = "SecondViewController"
}
extension UIStoryBoard{
class func load(_ storyboard: StoryBoardName) -> UIViewController{
return UIStoryboard(name: storyboard.rawValue, bundle: nil).instantiateViewController(withIdentifier: storyboard.rawValue)
}
}
và sau đó bạn có thể tải Storyboard của bạn trong ViewController của bạn như thế này:
class MyViewController: UIViewController{
override func viewDidLoad() {
super.viewDidLoad()
guard let vc = UIStoryboard.load(.second) as? SecondViewController else {return}
self.present(vc, animated: true, completion: nil)
}
}
Khi bạn tạo một Storyboard mới chỉ cần đặt cùng tên trên StoryboardID và thêm tên Storyboard trong enum của bạn "StoryBoardName"
Bạn luôn có thể chuyển ngay đến bộ điều khiển gốc:
UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *vc = [storyboard instantiateInitialViewController];
vc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentViewController:vc animated:YES completion:NULL];
- 1. Sử dụng hoạt ảnh Bảng phân cảnh trên điều khiển được thêm theo chương trình
- 2. Tốc độ phát triển iOS có sử dụng Bảng phân cảnh và theo chương trình không?
- 3. Bảng phân cảnh - Ẩn thanh trên cùng của bộ điều khiển điều hướng theo chương trình
- 4. XCode tải bảng phân cảnh chính như thế nào?
- 5. Các cách thay thế để đẩy bộ điều khiển xem bằng bảng phân cảnh theo chương trình
- 6. Làm cách nào để phân phối chương trình python?
- 7. Làm cách nào để chuyển đổi tab theo chương trình?
- 8. Làm cách nào để gửi UILongPressGesture theo chương trình?
- 9. Làm cách nào để đặt kiểu textView theo chương trình?
- 10. Làm cách nào để đặt docstring theo chương trình?
- 11. Làm cách nào để đặt tiêu đề theo chương trình
- 12. Xem chi tiết bảng phân cảnh trong bảng phân cảnh
- 13. Làm thế nào để hiển thị UITableView theo chương trình?
- 14. Làm cách nào để chuyển thông tin giữa các phân đoạn bảng phân cảnh?
- 15. Bảng phân vùng in - Chương trình C
- 16. Cách tải lại hàng đã di chuyển theo chương trình?
- 17. GWT: Làm thế nào để tải lại CellBrowser theo chương trình?
- 18. Bảng phân cảnh XCode: cách tạo khoảng cách khi trình kích hoạt segue không nằm trên bảng phân cảnh
- 19. Gọi bảng phân cảnh có lập trình trong ủy quyền
- 20. Cách thêm phân đoạn theo chương trình trong relativelayout
- 21. Làm cách nào để khởi chạy lại Trình tìm kiếm theo chương trình?
- 22. Làm cách nào để thay đổi trình bảo vệ màn hình theo chương trình?
- 23. Làm cách nào để bạn phân phối chương trình Clojure cho người không lập trình?
- 24. Bất kỳ cách nào để đặt lại bảng xếp hạng theo chương trình?
- 25. Tạo bảng phân cảnh theo mã sau trong WPF
- 26. Cách nhanh nhất để tải dữ liệu hàng loạt vào HBase theo chương trình là gì?
- 27. Bảng phân cảnh - UITabBarController
- 28. iOS 5 Bảng phân cảnh và Nibs
- 29. Làm thế nào để chuyển đổi xib thành bảng phân cảnh?
- 30. Cách xác định cảnh báo trong bảng phân cảnh Xcode?
'[sb instantiateInitialViewController]' có ích nếu bạn muốn bắt đầu trên bộ điều khiển chế độ xem mặc định của cảnh. – drewish
James, cảm ơn bạn! Tôi đã tìm kiếm một thời gian khá dài để tìm cách làm thế nào để tạo ra một cái nhìn của Storyboard. Câu trả lời của bạn (và câu hỏi của kokoko) là làm mới nhất để tìm. – bejonbee
Trên mã của James Beith, người ta phải sử dụng lại UIViewControler * vc nếu nó được chuyển qua lại với bộ điều khiển xem hiện tại. Tôi phát hiện ra một cách khó khăn mà vc dính xung quanh và được kết nối với ngòi truyện cho đến khi người dùng nhấn một nút trên giao diện mới, và hiện giờ đã có rò rỉ bộ nhớ với vc bị loại bỏ khỏi các câu lệnh trước của mã này. – SWoo