2010-07-19 23 views
11

Tôi đã có một vấn đề lạ với một TableViewController. Trong tài liệu nó nói rằng một tableViewController giao dịch cũng với phương pháp -flashScrollIndicators khi bảng "quá khổ" tôn trọng khu vực có thể nhìn thấy.TableViewController không flash chỉ báo cuộn ngay cả khi bảng lớn hơn mà xem

Ứng dụng của tôi bao gồm trong bộ điều khiển 3 nav được tải trong bộ điều khiển tab. Mỗi bộ điều khiển nav có dạng điều khiển xem gốc, một lớp con của một bộ điều khiển xem bảng. Mỗi "mô hình" được điền từ một tệp plist, tải nội dung của nó vào một mảng trong khung nhìn -viewDIdLoad, sau đó mọi thứ được chuyển tới bảng. Mọi thứ đều được tải không có chương trình IB.

Tôi đã phát hiện ra trong ứng dụng của mình khi nó tải chế độ xem đầu tiên (bộ điều hướng nav có bộ điều khiển xem bảng dưới dạng gốc) thanh cuộn không nhấp nháy ngay cả khi số lượng ô đủ lớn. Nếu tôi chọn một tab khác, tải một thanh điều hướng điều hướng khác (với t.v.c. làm thư mục gốc) thì không được hiển thị lại. Khi tôi nhấn tab tương ứng với bộ điều khiển nav đầu tiên, thanh cuộn sẽ nhấp nháy.

Vì vậy, tôi đã cố gắng để làm cho nó nhấp nháy bằng chương trình nhưng không có cách nào, các mã có vẻ đơn giản:

[self.tableView flashScrollIndicators]; 

Tôi đã cố gắng để đặt nó gần như ở khắp mọi nơi. Đầu tiên trong -viewDidLoad (Như được đề xuất trong tài liệu), sau đó trong viewDidAppear và in -viewWillAppear. Cũng cố gắng sử dụng mã tring đó để truyền chế độ xem của t.v.c. như một cái nhìn bảng.

[((UITableView*)self.view) flashScrollIndicators]; 

..không có kết quả.

Tôi đã bắt đầu xem mẫu Apple và tôi thấy rằng trong thanh cuộn tùy chỉnh mẫu của Apple (thanh có thời điểm khác), thanh cuộn cũng không nhấp nháy ở đó. Thử nghiệm cả trên sim và thiết bị.

Có phải lỗi không ?, có cách nào chính xác để hiển thị nó theo chương trình không? Ai đó có thể giúp tôi không? Trân trọng, Andrea

+0

Nó chỉ nên làm việc khi bạn gọi 'flashScrollIndicators', nhưng tôi có thể khẳng định nó có thể cực kỳ bực bội để xác định nơi tốt nhất để đặt những thứ như thế này. Không có hình phạt trong việc gọi nó hai lần btw để chỉ xả rác dự án của bạn với cuộc gọi này ;-) – mvds

+0

Hi mvds tiếc là nó không hoạt động ngay cả khi tôi cố gắng gọi một mình trong -viewDidLoad, -viewWillAppear, -viewDidAppear. – Andrea

+0

Bạn đã kiểm tra xem self.tableView có phải không phải là không? Trước tiên bạn đã thử một -reloadData chưa? –

Trả lời

38

Hoặc ngắn gọn hơn:

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    [self.tableView performSelector:@selector(flashScrollIndicators) withObject:nil afterDelay:0]; 
} 
+0

Công trình này !!! Cảm ơn! Tôi sử dụng điều này trong [acaniChat] (https://github.com/acani/acaniChat) để flash các chỉ báo cuộn của 'UITableView * chatContent' khi' UIViewController * chatViewController' xuất hiện. – ma11hew28

+0

chỉnh sửa, quên gọi thực hiện lớp siêu là thói quen xấu;) – matm

+0

Tôi đã sử dụng chỉ [self.scrollView flashScrollIndicators]; không hoạt động trong một trường hợp cụ thể, trong khi giải pháp performSelector của bạn hoạt động tốt. Cảm ơn. –

12

Tôi đã gặp sự cố tương tự. Tôi nhận được xung quanh nó cuối cùng bằng cách đặt một bộ chọn chậm trong phương pháp viewDidAppear:. Thật kỳ lạ, tôi có thể đặt nó thành 0 giây và nó vẫn hoạt động tốt.

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 

    [self performSelector:@selector(flashTableScrollIndicators) withObject:nil afterDelay:0.0]; 
} 

- (void)flashTableScrollIndicators 
{ 
    [self.tableView flashScrollIndicators]; 
} 
+0

Đó là giải pháp tôi đang tìm kiếm.THX. Kính trọng, Andrea – Andrea

+2

bạn cũng có thể làm điều đó như thế này '[self.tableView performSelector: @selector (flashScrollIndicators) withObject: nil afterDelay: 0.0];' – matm

3

Nó không được hiển thị khi bạn hiển thị tiêu đề chỉ số phần.

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView; 
+0

+1 cho thông tin – filou

0

Giải pháp của tôi là để gửi "flashScrollIndicators()" tin nhắn với một chút chậm trễ sử dụng "dispatch_after":

let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(0.4 * Double(NSEC_PER_SEC))) 

dispatch_after(delayTime, dispatch_get_main_queue(), 
{() -> Void in 
    myScrollView.flashScrollIndicators() 
}) 
Các vấn đề liên quan