2012-01-28 31 views
57

Tôi đang tìm cách thay thế để đẩy bộ điều khiển chế độ xem được khởi tạo trên bảng phân cảnh theo chương trình. Tôi đã thực sự tìm thấy hai cách khác nhau, mà tôi sử dụng để đi đến điểm tiếp theo, mà còn để quay trở lại theo thời gian: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

  1. sử dụng pushViewController:

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil]; 
    LocationWebView *lvc = [storyboard instantiateViewControllerWithIdentifier:@"LocationWebView"]; 
    [self.navigationController pushViewController:lvc animated:YES]; 
    
  2. thực hiện Segue lập trình:

    [self performSegueWithIdentifier: @"SongSegue" sender: self]; 
    

bạn có som e gợi ý về lựa chọn thay thế và cách tốt nhất hoạt động này nên được thực hiện? Lưu ý rằng tôi không đề cập đến chế độ xem phương thức.

+0

cá nhân, vì bạn đang sử dụng Bảng phân cảnh và phân đoạn, sau đó # 2 là cách làm tốt hơn. –

+0

# 1 có thể hữu ích nếu bạn phải đẩy một bộ điều khiển xem không thể có một segue? tức là đẩy xem điều khiển từ nút tiết lộ của chú thích mapview. – kappa

+0

Mọi thứ đều có thể có một khoảng cách. Không phải tất cả mọi thứ có thể có một * tự động * segue hoàn toàn được thực hiện trong IB (như nút và các tế bào bảng). Nhưng bạn vẫn có thể tạo một segue trong IB bắt đầu từ một bộ điều khiển khung nhìn và sử dụng # 2 để thực hiện nó; đây chính xác là những gì bạn muốn làm cho các nút chú thích bản đồ. – rickster

Trả lời

4

Cá nhân, tôi sử dụng số 2 khi tôi đang ở trong UIViewController thuộc UINavigationController. Tôi không nghĩ rằng nó sẽ làm việc nó không có UINavigationController.

Khi tôi đang sử dụng một cái nhìn đó là dưới một UITabBarController, tôi sử dụng đoạn mã sau để chuyển sang tab khác:

NSUInteger tabIndex = 2; // Index of the tab I want to select 
UIViewController * viewCtrl = [_tabController.viewControllers objectAtIndex:tabIndex]; 
_tabController.selectedViewController = viewCtrl; 
+2

Không nên 'objectAtIndex: 0' là' objectAtIndex: tabIndex'? – Kevin

+0

@Kevin Bạn nói đúng. Tôi đã chỉnh sửa trong ví dụ. – gfrigon

36

của Apple khuyến cáo sử dụng performSegueWithIdentifier:sender:someObject để lập trình thực hiện segues. Có ít nhất một vài lợi thế để thực hiện nó theo cách này:

  • Ít mã của riêng bạn có nghĩa là bạn đang cho khuôn khổ làm nhiều công việc. Nếu Apple đưa ra một số hiệu ứng hình ảnh mới cực kỳ thú vị cho các phân đoạn đẩy hoặc cải thiện hiệu suất hoặc sửa lỗi trong một số bản phát hành iOS trong tương lai, ứng dụng của bạn có thể tải miễn phí. Và mỗi dòng mã bạn viết để làm việc, khung làm việc có thể làm cho bạn tăng khả năng viết các lỗi.

  • Thông tin thêm trong IB có thể dễ thay đổi hơn. Nếu bạn quyết định bạn muốn thay đổi tất cả các phân đoạn push sang phân đoạn phương thức hoặc một số loại segue tùy chỉnh, nơi bạn có hiệu ứng hình ảnh siêu mát mẻ của riêng mình, bạn có thể chọn 'em tất cả trong IB và thay đổi loại segue bằng một cú nhấp chuột thay vì săn bắn xung quanh trong mã của bạn.


Bên cạnh đó, cho dù bạn sử dụng phương pháp đầu tiên hoặc thứ hai, đẩy một bộ điều khiển xem để đi "trở lại" với một bộ điều khiển giao diện trước đó sẽ không làm việc theo cách người dùng của bạn. Khi bạn đẩy một SongViewController, nó được thêm vào phần cuối của hướng stack:

LocationViewController -> SongViewController 

Nếu bạn sau đó đẩy LocationViewController lần nữa để đi "trở lại":

LocationViewController -> SongViewController -> LocationViewController 

Nếu người dùng chạm vào nút quay lại trong thanh điều hướng, họ sẽ quay lại từ chế độ xem vị trí sang chế độ xem bài hát sang chế độ xem vị trí một lần nữa. (Ngoài ra, nếu bạn tiếp tục làm điều này, mọi "trở lại" và "chuyển tiếp" sẽ thêm vào chuỗi bộ điều khiển chế độ xem ngày càng tăng, điều này có thể dẫn đến sự cố khác.)

Thay vào đó, bạn nên để bộ điều khiển điều hướng quay lại.Nó đặt một nút trong thanh điều hướng cho mục đích đó, nó sẽ xử lý hầu hết các trường hợp sử dụng. Nếu bạn cần điều khiển riêng của mình để quay trở lại, bạn không thể làm điều này trong IB với iOS 5, nhưng bạn có thể làm điều đó theo chương trình với phương thức popViewControllerAnimated: của bộ điều hướng.

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