Làm thế nào để bạn vô hiệu hóa chỉ chọn một ô trong UITableView? Tôi có một số, và tôi chỉ muốn người cuối cùng bị vô hiệu hóa.Vô hiệu hóa lựa chọn một UITableViewCell duy nhất
Trả lời
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = ...
cell.selectionStyle = UITableViewCellSelectionStyleNone;
}
Điều này sẽ ngăn không cho ô xuất hiện được chọn, nhưng 'tableView: didSelectRowAtIndexPath:' vẫn sẽ được gọi. – Brian
Xem câu trả lời của tôi cho một giải pháp sạch thực sự hoạt động. – Barry
Sử dụng cả hai 'cell.selectionStyle = .None' và' cell.userInteractionEnabled = false' kết hợp sẽ bao gồm hầu hết các kịch bản. – SwiftArchitect
-(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if ([self numberOfRowsInSection] == [indexPath row]) {
return nil;
} else {
return indexPath;
}
}
hàng cuối cùng của bảng sẽ không được chọn
Điều này sẽ ngăn chặn các tế bào từ thực sự được lựa chọn, nhưng nó vẫn sẽ được đánh dấu khi người dùng chạm vào nó – Brian
Xin lỗi, cần phải thêm kiểu UITableViewCellSelectionStyleNone vào ô –
Tôi có thể thêm rằng thiết lập phong cách lựa chọn tableview nên được thực hiện trong cellForRowAtIndexPath: tránh lag khi tải TableView (xem bảng mất 1-2 tốt để vô hiệu hóa lựa chọn cho ô). –
Để ngừng sử dụng chỉ là một số tế bào được chọn:
cell.userInteractionEnabled = NO;
Cũng như ngăn ngừa sự lựa chọn, điều này cũng dừng tableView : didSelectRowAtIndexPath: đang được gọi cho các ô đã được thiết lập. Nó cũng sẽ làm cho lồng tiếng xử lý nó giống như một nút mờ (có thể hoặc có thể không được những gì bạn muốn). Lưu ý rằng nếu bạn có các yếu tố tương tác trong ô (ví dụ: nút chuyển/nút), bạn sẽ cần phải sử dụng cell.selectionStyle = UITableViewCellSelectionStyleNone;
thay thế và sau đó đảm bảo bỏ qua các lần nhấn trên ô trong tableView:didSelectRowAtIndexPath:
.
Hãy thử thực hiện việc này trên chế độ xem nhận điểm đánh dấu. Nếu không, nó cũng giống như vô hiệu hóa ô. –
Tôi không thể sử dụng điều này vì nó cũng vô hiệu hóa 'cell.accessoryView', mà tôi đã đặt thành' UIButton' mà tôi muốn có thể gõ. – ma11hew28
Ngoài ra, điều này sẽ khiến Voice Over xử lý không chính xác ô dưới dạng nút mờ thay vì văn bản tĩnh (có phụ kiện tùy chọn). – Endersstocker
Như tôi đã đề cập in another thread tất cả các phương pháp trên không giải quyết được vấn đề một cách chính xác. Cách đúng đắn về việc vô hiệu hóa một tế bào là thông qua phương pháp
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
và phương pháp mà người ta phải sử dụng
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
mà vô hiệu hóa lựa chọn tế bào nhưng vẫn cho phép người dùng tương tác với subviews của ô như là UISwitch.
Ném này trong tùy chỉnh của bạn Bảng VC:
// cells lacking UITableViewCellAccessoryDisclosureIndicator will not be selectable
- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [self tableView:tableView cellForRowAtIndexPath:indexPath];
if (cell.accessoryType != UITableViewCellAccessoryDisclosureIndicator) {
return nil;
}
return indexPath;
}
// disabled cells will still have userinteraction enabled for their subviews
- (void)setEnabled:(BOOL)enabled forTableViewCell:(UITableViewCell *)tableViewCell
{
tableViewCell.accessoryType = (enabled) ? UITableViewCellAccessoryDisclosureIndicator : UITableViewCellAccessoryNone;
// if you dont want the blue selection on tap, comment out the following line
tableViewCell.selectionStyle = (enabled) ? UITableViewCellSelectionStyleBlue : UITableViewCellSelectionStyleNone;
}
Sau đó, để bật/tắt lựa chọn cho someTableViewCell, làm điều này:
[self setEnabled:state forTableViewCell:someTableViewCell];
Bạn đã làm xong và có thể xuất xưởng.
Cảm ơn, điều này hoạt động như một say mê! – Harry
Giải pháp sạch nhất mà tôi đã tìm thấy cho điều này chỉ sử dụng phương thức ủy nhiệm willDisplayCell.
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
if([indexPath row] == 0) //<-----ignores touches on first cell in the UITableView
{ //simply change this around to suit your needs
cell.userInteractionEnabled = NO;
cell.textLabel.enabled = NO;
cell.detailTextLabel.enabled = NO;
}
}
Bạn không phải thực hiện thêm bất kỳ hành động nào trong phương thức ủy quyền didSelectRowAtIndexPath để đảm bảo chọn ô này bị bỏ qua. Tất cả các lần chạm trên ô này sẽ bị bỏ qua và văn bản trong ô cũng sẽ chuyển sang màu xám.
với iOS 6.
Bạn có thể sử dụng phương pháp đại biểu sau đây và gửi lại NO
trong trường hợp bạn không nó để được lựa chọn và YES
trong trường hợp bạn muốn nó được chọn.
- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath
{
return indexPath.section == 0;
}
Hãy thử điều này trong nhanh chóng:
self.tableView.deselectRowAtIndexPath(indexPath, animated: true)
Nếu có ai tự hỏi làm thế nào để đạt được điều này trong nhanh chóng thì đây là mã của tôi. Tôi đang sử dụng Xcode 7 và được thử nghiệm bằng iPad Retina (iOS 9).
cell.selectionStyle = UITableViewCellSelectionStyle .None
cell.userInteractionEnabled = false
Cố gắng đặt hai dòng mã này cho dù bạn muốn. Trong trường hợp của tôi, tôi đã sử dụng điều này trong phương pháp này để hiển thị các ô.
override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath)
Hãy nhớ hai dòng mã này sẽ chặn bất kỳ loại lựa chọn hoặc tương tác nào với các ô của bạn nhưng bạn chỉ có thể sử dụng dòng đầu tiên riêng lẻ nếu muốn. Đó là ...
cell.selectionStyle = UITableViewCellSelectionStyle .None
Chỉ dòng này sẽ chặn lựa chọn vào ô của bạn.
Tuy nhiên, dòng thứ hai sẽ làm cho ô "Chỉ đọc". Đó là ..
cell.userInteractionEnabled = false
Cảm ơn
Hy vọng điều này giúp đỡ.
- 1. Làm thế nào để vô hiệu hóa lựa chọn một mục duy nhất trong GridView
- 2. UIPickerView vô hiệu hóa lựa chọn hàng
- 3. Vô hiệu hóa một lỗi cảnh báo duy nhất
- 4. QWebview/webkit vô hiệu hóa lựa chọn văn bản
- 5. Vô hiệu hóa lựa chọn DIV khi nhấp vào nó
- 6. Tắt hiệu ứng chọn khi chọn UITableViewCell
- 7. NSTableView - Vô hiệu hoá lựa chọn hàng
- 8. Vô hiệu hóa một ListView trong C#, nhưng vẫn hiển thị lựa chọn hiện tại
- 9. Vô hiệu hóa lựa chọn hàng cho một vài hàng - Primefaces
- 10. Animate UITableViewCell chiều cao trên lựa chọn
- 11. WPF XAML: Làm thế nào để vô hiệu hóa đa lựa chọn trong một DataGrid?
- 12. hình ảnh android bên trong một lựa chọn duy nhất
- 13. Làm cách nào để vô hiệu hóa lựa chọn văn bản tạm thời bằng JavaScript?
- 14. Xác thực JQuery - Vô hiệu hóa tính năng lấy nét cho một trường duy nhất
- 15. Vô hiệu hóa việc đánh dấu nội dung bằng asset_path cho một nội dung duy nhất
- 16. Vô hiệu hóa lựa chọn trượt ngang cho chế độ xem danh sách
- 17. ExtJS 4 - Grid - Vô hiệu hóa các lựa chọn hàng cho cột cụ thể
- 18. NSTimer Lặp lại x lần duy nhất, sau đó gọi bộ chọn khi nó vô hiệu hóa
- 19. SelectList với một lựa chọn vô
- 20. WPF Lựa chọn duy nhất giữa hai ListBox
- 21. Whats sự khác biệt giữa prop ('vô hiệu hóa', 'vô hiệu hóa') và chống đỡ ('vô hiệu hóa', đúng)
- 22. Thay đổi bộ tách UITableViewColor cho một UITableViewCell duy nhất
- 23. ListBox với một lựa chọn duy nhất và cũng không được chọn trên nhấp chuột ...?
- 24. Vô hiệu hóa UISearchBar
- 25. Tạo một loại giá trị không thể vô hiệu hóa có thể vô hiệu hóa
- 26. Vô hiệu hóa số nhiều tự động trong LINQ to SQL Lớp học cho một lớp duy nhất
- 27. Vô hiệu hóa một nút trong iOS
- 28. Thêm tùy chọn bị vô hiệu hóa trong codeigniter form_dropdown
- 29. Vô hiệu hóa jQuery Masonry
- 30. Vô hiệu hóa tùy chọn danh sách thả xuống KendoUI
bản sao có thể có của [UITableview: Cách tắt lựa chọn cho một số hàng nhưng không phải người khác] (http://stackoverflow.com/questions/2267993/uitableview-how-to-disable-selection-for-some-rows-but -not-others) – JosephH