2013-10-20 14 views
7

UITableView của tôi cần 2 lần nhấp để hiển thị trang chi tiết của ô đã chọn: một để chọn và một lần khác để hiển thị chế độ xem chi tiết. Tôi muốn một bản sao để hiển thị trực tiếp chế độ xem chi tiết của ô được nhấp.Phân đoạn phương thức cần 2 lần nhấp thay vì một số

tôi sử dụng một phương thức segue với phương pháp này bên trong UITableViewManager.m tôi:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:@"showDetail"]) { 
     NSIndexPath *indexPath = [playerList indexPathForSelectedRow]; 
     TCPlayerStat *object = _objects[indexPath.row]; 
     [[segue destinationViewController] setPlayerStat:object]; 
    } 
} 

Tôi không thể làm việc với một segue đẩy bởi vì tôi không có Navigation Controller (và không thực sự muốn).

Tôi đã tìm trong Trình kiểm tra thuộc tính TableView nhưng không tìm thấy bất kỳ điều gì có liên quan cho việc này. Tôi đã chọn "Lựa chọn duy nhất" và chọn "Hiển thị lựa chọn khi chạm". Tôi không biết nếu điều này là có thể và nếu nó là, nơi để tìm ..

Cảm ơn sự giúp đỡ của bạn.


EDIT 1: Khi tôi viết hai phương pháp như thế này, nó vẫn không hoạt động (cần 2 lần nhấp chuột) và tôi có một bản ghi cảnh báo mới:

"Cảnh báo: Cố gắng để trình bày TCDetailViewController: 0xa27b900 trên TCRootViewController: 0xa24f050 trong khi đang trình bày! "

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [self performSegueWithIdentifier:@"showDetail" sender:self]; 
} 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:@"showDetail"]) { 
     NSIndexPath *indexPath = [playerList indexPathForSelectedRow]; 
     TCPlayerStat *object = _objects[indexPath.row]; 
     TCDetailViewController *detailViewController = [segue destinationViewController]; 
     [detailViewController setPlayerStat:object]; 
    } 
} 

EDIT 2: Tôi không biết tại sao, nhưng đôi khi nó hoạt động hoàn hảo và không cần một nhấp chuột thứ hai trên xem bảng. Không thể tìm ra:/


Giải pháp dưới đây

+0

thử, đã chọn hàng tại đường dẫn chỉ mục - sau đó từ đó segue. – DogCoffee

Trả lời

13

Tôi thích vấn đề là gì!

Tôi đã thay đổi thông số trên Bảng phân cảnh mà tôi không nên có. Tôi muốn các tế bào lựa chọn không hiển thị một màu nền nổi bật khi tôi nhấp vào nó, nhưng có vẻ như Segue được dựa trên nó để làm việc decently.

CÁCH GIẢI PHÁP: Trong bảng phân cảnh, hãy chọn ô xem bảng trong Navigator và không chọn tùy chọn "Không" trong "Lựa chọn" (Thanh tra thuộc tính). "Màu xanh", "Xám" hoặc "Mặc định" có vẻ hoạt động tốt.

0

Sử dụng

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

thay vì

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 

Sau đó, bạn có thể viết bất kỳ mã và nó hoạt động trên nhấp chuột đầu tiên.

+0

Vấn đề có vẻ là ở một nơi khác. Trong kịch bản có thể. Không thể tìm ra ... Khoảng cách của tôi đã được Trình diễn một lần thực hiện nhưng nó cần 2 lần nhấp thay vì một lần nhấp chuột (trên màn hình bảng của tôi) 75% thời gian. Đôi khi nó hoạt động rất tốt:/ – Tulleb

11

Tôi đã có thuộc tính lựa chọn được đặt thành "Mặc định" và vẫn gặp sự cố hai lần nhấp. Tuy nhiên, gợi ý đó chỉ ra một giải pháp liên quan. Trong didSelectRowAtIndexPath, hãy gọi:

self.tableView.deselectRowAtIndexPath(indexPath, animated: false) 

(Tôi đang sử dụng Swift, rõ ràng.)

+0

Điều này có vẻ là một lỗi lạ chỉ ảnh hưởng đến Hiện tại theo phương thức -> Dissolve Cross và Flip Horizontal. Giải pháp của bạn hoạt động hoàn hảo Cảm ơn – Tom

+0

điều này đã thay đổi thành '' 'self.tableView.deselectRow (tại: indexPath, hoạt ảnh: false)' '' – reggie

+0

Có! Đây là giải pháp. Bạn phải bỏ chọn hàng bạn đã chọn. Và lựa chọn tùy chọn trong Storyboard không ảnh hưởng đến điều này. Cảm ơn bạn. – pulp

0

FYI. cho đến bây giờ, với Xcode 8.2.1 và Swift 3.x, vấn đề cũng tồn tại đối với lớp con tùy chỉnh UICollectionViewCell của tôi (Nhưng tôi cho rằng lớp con không cần thiết để tái tạo vấn đề này. Tôi không có thời gian để kiểm tra trường hợp này.).

Tôi tóm tắt sự cố là: nhấn vào ô đã chọn trước đó sẽ tiêu thụ sự kiện nhấn để gây ra sự bỏ chọn, thay vì mong đợi kích hoạt khoảng cách lựa chọn.

Vì vậy, giải pháp là, hoặc không sử dụng phân đoạn lựa chọn, nói, nhưng sử dụng phân đoạn kích hoạt theo lập trình hoặc bỏ chọn chính ô đó bất cứ khi nào khoảng cách chọn được kích hoạt.

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