2013-03-23 42 views
5

Tôi có bộ điều khiển chế độ xem (cho phép gọi là MainViewContoller) có 3 bảng khác nhau (mỗi lần một), người dùng có thể nhấn vào điều khiển phân đoạn để chuyển đổi giữa các bảng đó.Cuộn lên trên cùng khi nhấn vào thanh trạng thái

Để trình bày 3 bảng này, MainViewContoller có 3 bộ điều khiển chế độ xem khác (A, B và C), mỗi bộ điều khiển có UITableView làm chế độ xem phụ và xử lý dữ liệu của chính nó.
Khi một MainViewContoller được nạp, nó khởi bộ điều khiển A, B và C, và thêm tableViews của họ để nó xem:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    ViewControllerA *vcA = [ViewControllerA alloc] init]; 
    [self.view addSubview:vcA.view]; 

    ViewControllerB *vcB = [ViewControllerB alloc] init]; 
    [self.view addSubview:vcB.view]; 

    ViewControllerC *vcC = [ViewControllerC alloc] init]; 
    [self.view addSubview:vcC.view]; 
} 

Vì vậy, ví dụ như khi người dùng khai thác điều khiển phân đoạn và lựa chọn A, bảng MainViewContoller hide B và C, và bảng Bỏ ẩn A. Một cái gì đó như thế này:

if (userTapOnA) { 
    self.viewControllerA.tableView.hidden = NO; 
    self.viewControllerB.tableView.hidden = YES; 
    self.viewControllerC.tableView.hidden = YES; 
} 

vấn đề:

Khi người dùng gõ trên thanh trạng thái tôi muốn rằng bảng hiển thị hiện tại sẽ cuộn lên trên cùng.
Hành vi này khá cơ bản và được miễn phí khi sử dụng bộ điều khiển chế độ xem thông thường, nhưng bạn có thể thấy bộ điều khiển chế độ xem của tôi không thường xuyên.
Tôi cho rằng bằng cách sử dụng chế độ xem bộ điều khiển khác dưới dạng MainViewContoller chế độ xem Tôi phá vỡ hành vi mặc định, vì vậy, MainViewContoller của tôi không xử lý được thanh trạng thái.

Ai đó có ý tưởng về cách giải quyết điều đó?

Trả lời

26

Đây là trực tiếp từ tập tin tiêu đề UIScrollView:

/* Khi người dùng chạm vào thanh trạng thái, xem di chuyển bên dưới liên lạc đó là gần nhất với thanh trạng thái sẽ được cuộn lên trên, nhưng chỉ khi thuộc tính scrollsToTop của nó là CÓ, đại biểu của nó không trả lại NO từ shouldScrollViewScrollToTop và chưa được đặt ở số trên cùng. Trên iPhone, chúng tôi chỉ thực hiện thao tác này nếu có một chế độ xem cuộn trên màn hình với scrollsToTop == CÓ. Nếu có nhiều hơn được tìm thấy, sẽ không có mục nào được cuộn. */

@property (nonatomic) BOOL scrollsToTop; // mặc định là CÓ.

Vì vậy, trong trường hợp của bạn, hãy đặt tất cả các cuộnĐểKhông thành TỚI, ngoại trừ trường hợp bạn muốn bật tại thời điểm cụ thể đó.

+0

10x, điều đó rất hữu ích :) – Eyal

2

Bạn nên đăng ký bộ điều khiển lồng nhau của mình làm bộ điều khiển con.

[self addChildViewController:vcA]; 
[self addChildViewController:vcB]; 
[self addChildViewController:vcC]; 

Tôi không chắc liệu điều này có giúp giải quyết vấn đề của bạn hay không, nhưng đó là cách phù hợp để thực hiện.

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