2011-12-20 31 views
5

Tôi có một UITableView chính, khi ô được nhấn, nó đi đến một UITableView khác và khi một ô được nhấn vào nó sẽ đi đến một DetailView của ô đó.UIViewController để biết nếu nó đã bị đẩy hoặc xuất hiện?

Tôi muốn UITableView ở giữa hoạt động khác nhau tùy thuộc vào việc detailView có xuất hiện hay bản thân UITableView đã bị đẩy hay không. Nếu khung nhìn đã được đẩy lên từ bảng chính, tôi muốn cuộn lên trên cùng, nếu nó được hiển thị sau khi một DetailView xuất hiện, tôi muốn nó ở cùng vị trí.

Mọi đề xuất?

Trả lời

2

bạn có thể gọi phương thức scrollToTop trên DetailViewController sau khi bạn đã đẩy nó vào navigationController.

Something như thế:

if (!detailViewController) { 
    detailViewController = [[DetailViewController alloc] initWithNibName:nil bundle:nil]; 
} 
[self.navigationController pushViewController:detailViewController animated:YES]; 
[detailViewController scrollToTop]; 
// or use the tableView directly: 
// [detailViewController.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:YES]; 
+0

Cảm ơn bạn, thậm chí không biết bạn có thể cuộn trước khi chế độ xem là "hiển thị". – Nings

0

Tạo một BOOL @property về sở hữu UIViewController giữa của bạn được gọi là wasPushed hoặc một cái gì đó tương tự, và khi bạn khởi nó từ UIViewController 1, thiết lập thuộc tính trên các trường hợp mới, đẩy nó vào nav chồng và sau đó bạn có thể sử dụng tài sản của bạn trong các phương thức loadView, viewDidLoad, viewWill/DidAppear ở giữa của bạn.

Ngay sau khi bạn đã sử dụng, hãy đặt lại thành FALSE hoặc NO (hoặc bất kỳ thứ gì) và khi bạn kết thúc trở lại với nó do bật trình điều khiển chế độ xem thứ 3, bạn sẽ có nó là FALSE/NO trong các phương thức loadView, viewDidLoad v.v.

+0

nothe rằng 'viewDidLoad'is không nhận được được gọi khi bạn bật bộ điều khiển xem thứ 3 – pmk

+0

của mình, bạn sẽ nhận được 'viewDidLoad' nếu bạn nhấn vào cảnh báo bộ nhớ hoặc chế độ xem của viewController bị vứt bỏ trong khi bạn đã sâu hơn trong ngăn xếp. – Jessedc

+0

hm không biết rằng, thx cho gợi ý. Có một quy tắc hay một số định nghĩa về khi khung nhìn viewController bị vứt bỏ? – pmk

1

Trong View Controller Trung của bạn, kiểm tra mà xem là thế hệ tiếp theo để hiển thị trực tiếp từ UINavigationController stack:

- (void)viewWillDisappear:(BOOL)animated 
{ 
    if ([self.navigationController.topViewController isEqual:(UITableViewController *)tvcDetailView]) { 
     // Detail view has been pushed onto the UINavigationController stack 
    } 
    else { 
     // Middle view has been popped from the UINavigationController stack 
    } 
} 
+0

Nó không phải là hoàn hảo cho vấn đề này vì nó đã không tài khoản cho ra mắt đầu tiên của xem (nên được cuộn sau đó là tốt. Nhưng nó thực sự làm việc tuyệt vời với một vấn đề tôi đã có, vì vậy cảm ơn bạn cho điều đó! – Nings

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