Tôi đang cố thêm đại biểu tùy chỉnh vào UITableViewCell tùy chỉnh của tôi.Thêm đại biểu vào UITableViewCell tùy chỉnh (lỗi truy cập không hợp lệ)
Trên ô này, tôi có một nút cần phải kích hoạt phương thức trong ViewController nơi đặt UITableView.
Tôi đang làm tất cả các bước thông thường để thêm đại biểu tùy chỉnh nhưng vì một lý do nào đó khi tôi mở VC khi thời gian chạy ứng dụng bị lỗi và cho tôi lỗi truy cập không hợp lệ.
Khi tôi nhận xét tất cả mã đại biểu, nó hoạt động bình thường, do đó, tôi đoán là có điều gì đó sai khi tôi thêm đại biểu của mình. Khi tôi rời khỏi tài sản id của tôi uncommented nó dường như sụp đổ.
Tôi triển khai giao thức trong VC. Tôi đã chỉ định các đại biểu cho các tế bào trong cellForRowAtIndexPath :. Tất cả các phương thức đại biểu được đặt ra. Tôi đã sử dụng các công trình tương tự trong các lớp khác nhưng chưa bao giờ thuộc lớp con của UITableViewCells trước đây.
Trước khi tôi đăng một số mã, tôi muốn biết nếu ai đó gặp phải lỗi này trước đây. Nếu và làm thế nào ông giải quyết nó hoặc nếu nó thậm chí có thể làm cho một đại biểu tùy chỉnh cho một lớp con UITableViewCell.
EDIT:
My customCell.h
#import <UIKit/UIKit.h>
@class MyTableViewCell;
@protocol MyTableCellProtocoll <NSObject>
-(void) didPressButton:(MyTableViewCell *)theCell;
@end
@interface MyTableViewCell : UITableViewCell
{
UIButton *myButton;
id<MyTableCellProtocoll> delegationListener;
}
@property (nonatomic,retain) UIButton *myButton;
@property (nonatomic,assign) id<MyTableCellProtocoll> delegationListener;
- (void) buttonAction;
@end
.m
#import "MyTableViewCell.h"
@implementation MyTableViewCell
@synthesize myButton;
@synthesize delegationListener;
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
// Initialization code
self.myButton = [UIButton buttonWithType:UIButtonTypeCustom];
self.myButton.backgroundColor = [UIColor clearColor];
self.myButton.frame = CGRectMake(5, 0, 10, 32);
self.myButton.titleLabel.adjustsFontSizeToFitWidth = YES;
[self.myButton addTarget:self action:@selector(buttonAction) forControlEvents:UIControlEventTouchUpInside];
[self.contentView addSubview:self.myButton];
}
return self;
}
- (void) buttonAction
{
NSLog(@"buttonpressed");
[self.delegationListener didPressButton:self];
}
@end
MyVC thực hiện các đại biểu như đúng trong .h
@interface MyVC : UIViewController <UITableViewDelegate, UITableViewDataSource, MyTableCellProtocoll>
và nó cũng sử dụng một delegatemethod từ MyTableCellProtocoll trong .m
- (void)didPressButton:(MyTableViewCell *)theCell
{
NSLog(@"didPressButton");
}
tôi gán các đại biểu trong cellForRowAtIndexPath:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
MyTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[MyTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
cell.delegationListener = self;
}
return cell;
}
Đây là tất cả các địa điểm tôi sử dụng cho các đại biểu. Điều tôi muốn làm là thay đổi phụ đề và chèn một số hàng sau ô đó (bản sao đã sửa đổi)
Hy vọng điều này sẽ làm rõ mọi thứ hơn một chút.
EDIT2: Phương thức nút không được gọi lúc bắt đầu như đã được đo trong phần nhận xét. Mã đã được chỉnh sửa với mã đăng nhập.
EDIT3: Không có gì sai với nút. Đây là tài sản ủy nhiệm bị rối tung ở đâu đó. Với điểm ngắt và nhật ký và nhận xét tôi đã chắc chắn về điều đó.
Mã đang được chạy đến phần tử cuối cùng trong danh sách nguồn dữ liệu của tôi sau đó nó bị treo. 1 bước gần hơn với vấn đề bây giờ tôi giả sử.
CUỐI CÙNG EDIT: Ok, nó có vẻ như tất cả các đại biểu và các nút và các thành phần khác không phải là vấn đề gì cả. Đó là các heightForRowAtIndexPath: screwing tôi hơn. Cảm ơn tất cả các hỗ trợ của bạn dù sao đi nữa!
Không thể nhận xét mà không có mã. Nhưng có, một UITableViewCell có thể sử dụng một UIViewController như là một đại biểu - vấn đề của bạn âm thanh như việc sử dụng không đúng tiêu chuẩn của các đại biểu. Và ... phái đoàn có thể không phải là giải pháp tốt nhất, tùy thuộc. –
Không có lý do gì để không thể tạo giao thức đại biểu và id ivar trong lớp con NSObject (mà UITableViewCell là) –
jbat100
@PaulLynch: Tôi đã chỉnh sửa câu hỏi bằng một số mã của tôi. Những địa điểm này có việc sử dụng các hành động đại biểu của tôi. Hy vọng nó giúp. –