2012-03-20 31 views
8

Tôi đang cố gắng triển khai chế độ xem tương tự như chế độ xem của ứng dụng lịch của Apple khi đặt thời gian bắt đầu và thời gian kết thúc. Tôi có cái nhìn tuyệt vời, nhưng tôi đang gặp hai vấn đề. Trước tiên, tôi muốn có hàng đầu tiên được chọn tự động. Tôi sắp xếp việc này bằng cách sử dụng:Duy trì lựa chọn khi cập nhật UITableView qua reloadData

NSIndexPath *indexPath=[NSIndexPath indexPathForRow:0 inSection:0]; 
[dateTableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionBottom]; 

Tuy nhiên, một hoạt ảnh hiển thị, chọn trực quan chế độ xem khi lượt xem được tải, tôi muốn nó được chọn khi lượt xem tải.

Vấn đề thứ hai và quan trọng hơn là khi tôi tải lại dữ liệu sau khi bộ chọn đã cập nhật, tôi mất lựa chọn và nhiệm vụ của tôi không hoạt động.

Bây giờ tôi biết đây là hành động mặc định của reloadData, tôi đang tìm một phương pháp thay thế để hoàn thành mục tiêu của tôi, hoặc có lẽ làm thế nào tôi có thể tăng thêm tải lại dữ liệu để không bỏ chọn lựa hiện tại.

Nhiệm vụ của tôi được bao gồm dưới đây:

-(IBAction)dateChanged 
{ 

    NSIndexPath *index = self.dateTableView.indexPathForSelectedRow; 
    if(index == 0) 
    { 
     if (self.date2 == plusOne) { 
      self.date = [datePicker date]; 
      plusOne = [self.date dateByAddingTimeInterval:60*60]; 
      self.date2 = plusOne; 
     } 
     else 
     { 
      self.date = [datePicker date]; 
     } 

    } 
    else{ 
     self.date2 = [datePicker date]; 
    } 

    [dateTableView reloadData]; 
} 

Lưu ý: plusOne là một biến mà ban đầu chỉ một giờ kể từ thời điểm hiện tại.

Cảm ơn trước!

+0

Bạn đang gọi phương thức chặn mã đầu tiên của mình từ phương thức nào? – MishieMoo

Trả lời

13

Đối với sự cố đầu tiên, hãy đặt hoạt ảnh: NO trên cuộc gọi phương thức. Bạn hiện đang đặt nó thành CÓ.

[dateTableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionBottom]; 

Đối với vấn đề thứ hai, nó không thực sự rõ ràng những gì bạn đang cố gắng để lựa chọn sau khi tải lại dữ liệu, nhưng tôi thấy một vấn đề với dòng này:

if(index == 0) 

Bạn đang hỏi nếu con trỏ đến đối tượng là 0. Tôi nghĩ rằng những gì bạn muốn hoặc là để kiểm tra xem index == nil hoặc index.section == 0 && index.row == 0 hoặc một cái gì đó như thế.

Dù sao, nếu bạn gọi reloadData trên UITableView, bạn sẽ mất lựa chọn. Tại thời điểm đó, bạn cần chọn một hàng mới. Nếu có một mục trong mô hình dữ liệu của bạn mà bạn muốn chọn, bạn cần phải tìm ra nó ở đâu và chọn nó dựa vào vị trí của nó trong bảng (Bạn nên biết điều này vì bạn đang cung cấp thông tin đó trong đại biểu UITableViewDataSource phương thức.). Ngoài ra, nếu bạn muốn chọn NSIndexPath bạn đã lưu trong dòng đầu tiên của dateChanged, chỉ cần chọn nó sau khi tải lại dữ liệu.

+0

Cảm ơn! Không thể tin rằng tôi đã bỏ lỡ điều đó! – Jerome

+0

Tuyệt vời, đã có thể làm việc dựa trên những gì bạn nói. Đã thêm index.row và được chọn lại sau khi tải lạiData mà không có hoạt ảnh. Cảm ơn một người đàn ông tấn, bạn đá! – Jerome

+0

@BrianCooley nơi để viết dòng datatableview ?? – Muju

1

Đối với vấn đề đầu tiên, hãy viết mã của bạn trong didSelectRowAtIndexPath: trong một phương thức. Sau đó bạn có thể gọi phương pháp này từ didSelectRowAtIndexPath: Bạn nên vượt qua indexPath như là đối số cho chức năng của bạn như thế nào,

-(void)doActionsInDidSelectRow:(NSIndexPath*)indexPath{ 
    // write code. 
} 

Trong viewDidLoad gọi phương pháp này như

-(void)viewDidLoad{ 

     NSIndexPath *indexPath=[NSIndexPath indexPathForRow:0 inSection:0]; 
     [dateTableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionBottom]; 
     [self doActionsInDidSelectRow:indexPath]; 
} 

Đối với vấn đề thứ hai đề nghị của tôi là, mỗi lần khi bạn chọn một ô lưu trữ văn bản của ô đó trong một NSString. Khi bạn tải lại dữ liệu, bên trong cellForRowAtIndexPath: chỉ cần so sánh văn bản của ô với nội dung chuỗi mà bạn đã lưu trữ trước đó. Nếu chúng bằng nhau, hãy chọn lựa bằng cách sử dụng phương pháp

[dateTableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionBottom]; 

. Hy vọng điều này sẽ giải quyết vấn đề của bạn.

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