2013-10-24 35 views
5

Tôi có UICollectionView bao gồm nhiều ô. Tôi muốn có thể chạm vào một trong các ô này và phân tách Storyboard của tôi thành một bộ điều khiển chế độ xem khác sau khi xác định rằng đây là hành động thích hợp.PrepareForSegue không bao giờ được gọi là

Tôi đã tạo bộ điều khiển chế độ xem phụ, cùng với segue, trong Bảng phân cảnh của tôi. Trong lớp con UICollectionView của tôi, tôi đã thực hiện những điều sau đây ...

-(BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender { 
    return NO; // So that I can determine whether or not to perform the segue based on app logic 
} 

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { 
    [collectionView deselectItemAtIndexPath:indexPath animated:YES]; 

    // Selection logic here 
    [self performSegueWithIdentifier:@"showDetailView" sender:self]; 
} 

Trong lớp này, tôi cũng đã thực hiện - (void) prepareForSegue: (UIStoryboardSegue *) segue người gửi: (id) người gửi để cho phép tôi để thiết lập xem chi tiết của tôi trước khi segue được thực hiện. Có vẻ như sau:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    NSLog(@"HELLO, WORLD!!!"); 
} 

Mọi thứ dường như theo thứ tự, nhưng tôi thấy rằng prepareForSegue KHÔNG BAO GIỜ được gọi. Tôi đã thử đăng nhập, thiết lập các điểm ngắt. Không có dấu hiệu cho thấy phương pháp này được gọi là EVER. Tôi đang thiếu gì ở đây? Tại sao phương pháp này không được gọi? Mặc dù bây giờ tôi có tuyên bố "Hello, World" đơn giản, trước đây tôi đã có mã mà chế độ xem chi tiết của tôi phụ thuộc vào và nó sẽ dẫn đến một ngoại lệ vì chế độ xem chi tiết không được thiết lập đúng cách.

Có điều gì khác mà tôi bị thiếu ở đây không? Một cái gì đó tôi nên làm mà tôi hiện không?

Trả lời

3

PrepareForSegue sẽ không bao giờ được gọi nếu bạn đặt shouldPerformSegueWithIdentifier:NO.

+0

Cảm ơn câu trả lời đúng. – Tommy

6

Bạn đang nói với iOS để không bao giờ Segue với điều này:

-(BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender { 
    return NO; // So that I can determine whether or not to perform the segue based on app logic 
} 

Thay đổi NO YES và nó sẽ làm việc. Hoặc thêm logic bên trong ít nhất trả về YES khi bạn muốn segue.

+0

Nếu bạn nhìn vào phương thức didSelectItemAtIndexPath, bạn sẽ thấy tôi đang thực hiện phân đoạn theo cách thủ công. – Shadowman

+1

@Shadowman bạn đã thử đặt nó thành CÓ và xem liệu nó có hoạt động không? –

2

Hãy chắc chắn nếu bạn đang sử dụng ô mẫu (với các ô động) mà bạn đặt số nhận dạng trong bảng phân cảnh và sử dụng nó trong đại biểu của bạn. Tôi đã gặp vấn đề này và đã cho tôi một chút để tìm ra.

static NSString *cellIdent = @"prototypeCellName"; 
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdent]; 
Các vấn đề liên quan