2011-02-05 36 views
8

Tôi đã đọc các tài liệu của Apple và tôi đã trolled các diễn đàn và tôi đã (thành công) thực hiện một số hướng dẫn và làm đại biểu của riêng tôi và tôi vẫn không hiểu điều gì đó. Tôi chắc chắn rằng nó là một cái gì đó tôi khoảng cách đi nhưng vì tôi đã thực hiện thẩm định và vẫn không biết những gì tôi đang làm sai tôi đã hy vọng một trong các bạn sẽ có thể cho tôi biết.đại biểu từ nút vòi bên trong tùy chỉnh UITableViewCell

Tình huống:

Tôi có UITableViewCell tùy chỉnh có nút trong đó. Khi nút được khai thác Tôi đang cố gắng để kéo lên UIImagePickerController mẫu một đại biểu của ô tùy chỉnh này. Tôi có thể bẫy và đáp ứng với các nút tap không có vấn đề nhưng dòng chảy không bao giờ đi đến phương pháp đại biểu. Nói cách khác, khi tôi bước qua mã, mọi thứ đều ổn cho đến khi tôi cố gắng chuyển từ phương thức target button sang phương thức delegate trong lớp thứ hai. Nó không bao giờ được gọi.

Đây là mã.

Trong tập tin giao diện cho các tế bào tùy chỉnh tôi đặt id cho các đại biểu, thiết lập IBOutlet cho UIButton, và thiết lập các phương pháp giao thức:

#import <UIKit/UIKit.h> 

@protocol CustomPicCellDelegate; 

@interface CustomPicCell : UITableViewCell <UITextInputTraits> { 

    UIButton *picButton; 
    ... 
    id<CustomPicCellDelegate> cellDelegate; 
} 

@property (nonatomic, retain) IBOutlet UIButton *picButton; 
... 
@property (nonatomic, assign) id<CustomPicCellDelegate> cellDelegate; 
... 
- (IBAction)getAPic; 

@end 

@protocol CustomPicCellDelegate <NSObject> 
- (void)getPhoto; 
@end 

Các UIButton được nối với các phương pháp getAPic bằng IB.

Trong tập tin thực hiện cho các tế bào tùy chỉnh tôi đặt phương pháp mà các mục tiêu UIButton trên cảm ứng bên trong và cố gắng gọi phương thức ủy nhiệm trong các đại biểu:

#import "CustomPicCell.h" 

@implementation CustomPicCell 
@synthesize cellDelegate; 

... 

- (IBAction)getAPic { 
    NSLog(@"You are here ..."); 

    if (cellDelegate && [cellDelegate respondsToSelector:@selector(getPhoto)]) { 
     [cellDelegate getPhoto]; 
    } 
} 

Trong giao diện lớp đại biểu tôi đặt nó như các đại biểu cho các tế bào tùy chỉnh:

@interface DelegateClass : UIViewController < ... CustomPicCellDelegate> { 
... 

Trong việc thực hiện lớp đại biểu tôi cố gắng để kéo UIImagePickerController:

- (void)getPhoto { 
    UIImagePickerController *picker = [[UIImagePickerController alloc] init]; 
    picker.delegate = self; 

    picker.sourceType = UIImagePickerControllerSourceTypeCamera; 

    [self presentModalViewController:picker animated:YES]; 
} 

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo (NSDictionary *)info { 
    [picker dismissModalViewControllerAnimated:YES]; 
} 

Tôi không thể hiểu tại sao đại biểu không bao giờ được gọi! Hãy hiểu rằng tôi chắc chắn rằng tôi đã bỏ lỡ một cái gì đó nhưng tôi đã được trên các tài liệu và các diễn đàn nhiều lần và tôi không thể tìm thấy những gì tôi đang làm sai. Tôi đang sử dụng các đại biểu trong các phần khác của mã chỉ tốt. Điểm này không hoạt động. Bất cứ ai có thể chỉ cho tôi những gì tôi đang béo? Cảm ơn

+4

Bạn chỉ định 'cellDelegate' ở đâu? –

+0

Ồ tôi có thể tự đập mình! Ole Begemann bạn hoàn toàn đúng 100%. Tôi có thể thề rằng tôi đã đặt nó. nhưng tôi đoán mã hóa ban đêm không phải là bạn của tôi. Tôi là một thằng ngốc vì đã bỏ lỡ điều đó! Cảm ơn nhiều. Điều đó giải quyết nó. Luôn luôn kiểm tra ba lần vào buổi sáng tôi đoán. – addzo

+0

Ole, Bạn cũng có thể chia sẻ cách khắc phục cách bạn đã chỉ định cellDelegate không? Tôi có mã tương tự như của bạn và đã có một vấn đề tương tự, nơi các phương pháp đại biểu được xác định trong bộ điều khiển xem khác đang làm việc hoàn hảo. Tuy nhiên phương thức ủy nhiệm được định nghĩa trong UITableViewCell tùy chỉnh không được gọi trong UITableViewController đang sử dụng UITableViewCell. – Jason

Trả lời

18

Tại sao bạn làm như thế này? Trực tiếp trong lớp UIViewController bạn có thể gán hành động cho nút như thế này.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    [cell. picButton addTarget:self 
         action:@selector(getPhoto) 
       forControlEvents:UIControlEventTouchUpInside]; 
    // ... 
} 
+0

Hi Prashant bạn có liên kết hay thông tin thêm về phương pháp này không? – Juan

+3

Điều gì sẽ là cách tốt nhất để theo dõi các tế bào của một nút khai thác? –

+0

tôi đang sử dụng xib nhưng sự kiện nhấp nút chỉ kích hoạt cho ô đầu tiên..không cho các ô khác..có thể bất kỳ ai nói sai gì – saran

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