2013-02-19 28 views
29

Tôi có một ô uitableview được đánh dấu khi người dùng chọn nó và sau đó được đẩy đến một cái nhìn chi tiết. Tôi muốn các tế bào được unhighlighted khi họ trở về bảng điều khiển xem xem bảng.Làm thế nào để bỏ chọn một ô uitableview khi người dùng quay trở lại bộ điều khiển xem

Tôi sẽ làm cách nào để hoàn thành việc này?

Tôi đoán [cell.textLabel setHighlighted:NO]; trong chế độ xemLàm mới, nhưng ô không được khai báo nếu tôi đặt ở đó.

nhờ sự giúp đỡ nào

+0

Nếu bạn đang sử dụng bảng phân cảnh thì bạn chỉ có thể kiểm tra thuộc tính lựa chọn rõ ràng. –

+0

@AlexanderofNorway thuộc tính đó chỉ xuất hiện nếu bạn sử dụng UITableViewController – commando24

Trả lời

71

Nếu bạn sử dụng UITableViewController lớp con sau đó chỉ cần thiết lập thuộc tính

self.clearsSelectionOnViewWillAppear = YES; 

khác trên viewDidAppear chỉ cần gọi

NSIndexPath *indexPath = self.tableView.indexPathForSelectedRow; 
if (indexPath) { 
    [self.tableView deselectRowAtIndexPath:indexPath animated:animated]; 
} 

// MARK: - Swift 3 
if let indexPath = tableView.indexPathForSelectedRow { 
    tableView.deselectRow(at: indexPath, animated: animated) 
} 
+0

hoàn hảo! cảm ơn – hanumanDev

+4

Lưu ý: 'clearsSelectionOnViewWillAppear' hoạt động hầu hết thời gian. Nó sẽ không hoạt động nếu bạn "swipe để trở lại" trên iOS7 trở lại tableViewController. Phương pháp thứ 2 hoạt động mọi lúc, với hoạt ảnh đẹp bổ sung. – Byte

+4

Tôi nghĩ tốt hơn nên sử dụng viewWillAppear hơn viewDidAppear - thời gian hoạt hình trông phù hợp hơn với những gì UITableViewController thực hiện. – chrisbuchholz

4

thử

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // Deselect the row which was tapped 
    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 
} 
0

Hoặc một số cách không phù hợp =)

NSArray *arrayWithPaths = [tableView indexPathsForVisibleRows]; 
for (NSIndexPath *path in arrayWithPaths) 
{ 
    [tableview deselectRowAtIndexPath:path animated:NO]; 
} 
6

Tôi quyết định đặt câu trả lời này thay vì nhận xét.

Nếu bạn đang sử dụng storyboard: Bấm vào UITableViewController của bạn -> Đánh dấu vào "Lựa chọn: Xóa trên Appearance" hộp

11

Swift 3,0

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 

    if let selectionIndexPath = self.tableView.indexPathForSelectedRow { 
     self.tableView.deselectRow(at: selectionIndexPath, animated: animated) 
    } 
} 
+0

(Có thể bạn có thể xóa' self.' trước mỗi lần gọi 'tableView', cho một số mã sạch hơn và nhanh hơn.) – royalmurder

+0

Để chắc chắn . Tôi chỉ muốn được rõ ràng về các biến thuộc về bộ điều khiển vì vậy tôi không làm cho họ bối rối với các biến địa phương. Chỉ là sở thích cá nhân. –

+0

@royalmurder Bạn chắc chắn có thể xóa nó; nó chỉ là vấn đề về phong cách. Cá nhân tôi thích sử dụng bản thân để phân biệt các thuộc tính của lớp từ ngà, như Dustin đã đề cập. Bất kể, việc sử dụng bản thân ở đây không có tác động đến chức năng trong tầm tay. – vikzilla

2

nhanh chóng 3

func clearOnAppearance() { 
    for indexPath in tableView.indexPathsForSelectedRows ?? [] { 
     tableView.deselectRow(at: indexPath, animated: true) 
    } 
} 
Các vấn đề liên quan