Tôi có quan điểm điều khiển với UITableView. Chiều cao của chế độ xem bảng là tĩnh và chiều cao == của màn hình. Số hàng trong bảng có thể thay đổi và đôi khi có thể là một tình huống khi số hàng nhỏ hơn số hàng có thể hiển thị, do đó xuất hiện một số khu vực rõ ràng ở cuối bảng. Tôi có thể phát hiện chạm vào nó mà không nhận dạng cử chỉ không? Có một số phương pháp đại biểu của UITableView?Làm thế nào để phát hiện vòi trên một phần rõ ràng của UITableView?
Trả lời
Vâng, có những phương pháp đại biểu, chẳng hạn như:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
Tuy nhiên, điều này chỉ sẽ cho bạn biết nếu một vòi nước xảy ra trên một hàng hiện có. Nếu bạn muốn chụp các vòi trên không gian trống bên dưới các hàng (hoặc trên tiêu đề phần), bạn sẽ cần phải sử dụng trình nhận dạng cử chỉ. Bạn có thể làm một cái gì đó như thế này:
// in viewDidLoad or somewhere similar
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tableTapped:)];
[self.tableView addGestureRecognizer:tap];
//.........
- (void)tableTapped:(UITapGestureRecognizer *)tap
{
CGPoint location = [tap locationInView:self.tableView];
NSIndexPath *path = [self.tableView indexPathForRowAtPoint:location];
if(path)
{
// tap was on existing row, so pass it to the delegate method
[self tableView:self.tableView didSelectRowAtIndexPath:path];
}
else
{
// handle tap on empty space below existing rows however you want
}
}
EDIT: cho một cách tiếp cận khác, hãy xem xét Connor Neville's approach từ câu trả lời của mình về bài đăng này và thêm các nhận dạng cử chỉ để nền của bảng.
Bạn đang muốn lấy một cử chỉ trên một khu vực không tự động lấy cử chỉ qua đại biểu, vì vậy AFAIK không có cách nào dễ dàng xung quanh trình nhận dạng cử chỉ. – Stonz2
Bây giờ một không thể xử lý sự kiện "tableTapped". Tôi đã thêm UIGestureRecognizerDelegate nhưng nó không hoạt động. –
@VictorIppolitov bạn có thể cần phải thay đổi tên biến từ 'self.tableView' những gì Thiên dụ/lớp tên biến là cho bảng của bạn. – Stonz2
Bạn không cần phải cử chỉ recogniser. Bạn nên impliment <UITableViewDelegate>
trong ViewController.h
của bạn và sau đó thêm phương pháp này để ViewController.m
của bạn:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
nơi indexPath
là chỉ số nhấp dòng/cột.
Điều này sẽ không cung cấp bất kỳ thông tin nào về các vòi trên 'tableView' nằm trong khoảng trống bên dưới các hàng hiện có, đó là những gì người hỏi đang hỏi. – Stonz2
Nhờ @ Stonz2, phiên bản nhanh chóng:
Swift 4
let tap = UITapGestureRecognizer(target: self, action: #selector(tableTapped))
self.tableView.addGestureRecognizer(tap)
@objc func tableTapped(tap:UITapGestureRecognizer) {
let location = tap.location(in: self.tableView)
let path = self.tableView.indexPathForRow(at: location)
if let indexPathForRow = path {
self.tableView(self.tableView, didSelectRowAt: indexPathForRow)
} else {
// handle tap on empty space below existing rows however you want
}
}
Swift 3
let tap = UITapGestureRecognizer(target: self, action: #selector(tableTapped))
self.tableView.addGestureRecognizer(tap)
func tableTapped(tap:UITapGestureRecognizer) {
let location = tap.location(in: self.tableView)
let path = self.tableView.indexPathForRow(at: location)
if let indexPathForRow = path {
self.tableView(self.tableView, didSelectRowAt: indexPathForRow)
} else {
// handle tap on empty space below existing rows however you want
}
}
Swift 2:
let tap = UITapGestureRecognizer(target: self, action: #selector(tableTapped))
self.tableView.addGestureRecognizer(tap)
func tableTapped(tap:UITapGestureRecognizer) {
let location = tap.locationInView(self.tableView)
let path = self.tableView.indexPathForRowAtPoint(location)
if let indexPathForRow = path {
self.tableView(self.tableView, didSelectRowAtIndexPath: indexPathForRow)
} else {
// handle tap on empty space below existing rows however you want
}
}
Tất cả các câu trả lời được cung cấp, bao gồm câu trả lời được chấp nhận, thêm UITapGestureRecognizer
vào tableView
; trong khi điều này sẽ làm việc, tôi đã phát hiện ra rằng cử chỉ nhận dạng này có thể cản trở vòi hàng và kích hoạt didSelectRowAtIndexPath
theo một cách hơi khó lường/không xác định.
Nếu bạn muốn phát hiện vòi trong "không gian trống" cũng như trong hàng, tôi đánh giá cao đề nghị thêm một cái nhìn nền để bàn của bạn, và thêm các nhận dạng cử chỉ đó:
let tap = UITapGestureRecognizer(target: self, action: #selector(tableTapped))
self.tableView.backgroundView = UIView()
self.tableView.backgroundView?.addGestureRecognizer(tap)
** Đây là câu trả lời hay nhất **: nó cũng giữ nguyên phần trả lời lựa chọn 'tableView' để bạn có thể thấy lựa chọn các hàng của mình. –
Cảm ơn bạn đã chia sẻ. –
- 1. Làm cách nào để phát hiện các vòi trên UITableView bên ngoài UITableViewCells - tức là trong tiêu đề phần?
- 2. Làm cách nào để phát hiện các vòi trên một phần cụ thể (chuỗi phụ) của một nhãn UILabel?
- 3. Phát hiện vòi trên GMSPolyline trong Swift?
- 4. Phát hiện một vòi nước trên CAShapeLayer trong Swift?
- 5. Làm thế nào để phát hiện vòi trên MKPolylines/Lớp phủ như Maps.app?
- 6. Làm thế nào để phát hiện sự kiện kéo kết thúc của một UITableView?
- 7. Làm thế nào để bạn thực hiện các phương thức compareTo một cách rõ ràng?
- 8. Phát hiện cuộn UITableView
- 9. "Các ràng buộc để thực hiện giao diện rõ ràng ..."
- 10. Làm thế nào để phát hiện iPhone trên mạng?
- 11. Làm thế nào để hoàn tác git stash rõ ràng
- 12. Làm thế nào để bạn phá hủy một đối tượng trong Perl một cách rõ ràng?
- 13. Có thể buộc thực hiện rõ ràng giao diện (hoặc một phần của giao diện) không?
- 14. Làm thế nào để bạn tạo hiệu ứng một cách rõ ràng backgroundColor của CALayer?
- 15. Làm thế nào để phát ra thực hiện giao diện rõ ràng bằng cách sử dụng reflection.emit?
- 16. UITableView với các ô tĩnh không có cellForRowAtIndexPath. Làm thế nào để thiết lập nền tảng rõ ràng?
- 17. Làm thế nào để bạn tạo một bản sao của một biến trong PHP một cách rõ ràng?
- 18. Làm thế nào để phát hiện lựa chọn Cell trong UITableView - Swift
- 19. Swift: Làm thế nào để animate rowHeight của một UITableView?
- 20. Làm thế nào để phát hiện sự hiện diện của bàn phím phần cứng?
- 21. Làm thế nào để GNU kiểm tra một cách rõ ràng cho sự thất bại?
- 22. Làm thế nào để sửa một CMake rõ ràng bị hỏng?
- 23. Làm thế nào để phản ánh trên C# thực hiện giao diện rõ ràng từ ngăn xếp cuộc gọi?
- 24. MonoTouch - Phát hiện cuộn UITableView
- 25. Làm thế nào để phát hiện mà UITableView được di chuyển
- 26. Làm thế nào để thực hiện một hộp văn bản với một nút rõ ràng trong wpf?
- 27. Làm thế nào để vượt qua một 'vòi' để UIButton là bên dưới UIView với UISwipeGestureRecognizer?
- 28. Làm thế nào để phát hiện liên lạc trên UIWebView
- 29. Làm thế nào để trích xuất một mảng phụ từ một mảng 2d không rõ ràng?
- 30. Gherkin - làm thế nào để bạn viết một bài kiểm tra rõ ràng bằng tiếng Anh?
Để didSelectRowAtIndexPath sử dụng lựa chọn hoặc bạn cũng có thể sử dụng tapgesture. –
@VictorIppolitov gì về việc tạo ra một lớp tiểu UITableView, chuyển nhượng đó để xem bảng của bạn, và touchesBegan trọng vào các lớp tiểu mới? –