我有一个UITableView类,我在另一个类
中调用 MyPocketTableView * myPocketTableView = [[MyPocketTableView alloc]initWithFrame:CGRectMake(85, 153, 235, 250) style:UITableViewStyleGrouped];
但是,UITableViewClass中的init方法不允许我这样做。
@implementation MyPocketTableView
- (id) initWithFrame:(CGRect)frame style:(UITableViewStyle)style {
self = [super initWithFrame:frame];
self = [super initWithStyle:style]
if (self) {
//[self setFrame:CGRectMake(85, 153, 235, 250)];
self.dataSource = self;
self.delegate = self;
}
return self;
}
我无法将样式:(UITableViewStyle)样式添加到init方法定义中,也不能执行self = [super initWithStyle:style]
因为它抱怨说
'UITableView'没有可见的@interface声明选择器initWithStyle。
创建类时的默认init方法是- (id) initWithFrame:(CGRect)frame
。 MyPocketTableView是UITableView的子类。
@interface MyPocketTableView : UITableView <UITableViewDataSource,UITableViewDelegate>
答案 0 :(得分:2)
您需要将界面设置为 UITableViewController
,然后使用initWithStyle:
。
此外,在执行以下操作时,无需设置UITableView协议代理
@interface MyPocketTableView : UITableViewController
然后你可以打电话:
MyPocketTableView * myPocketTableView = [[MyPocketTableView alloc] initWithStyle:UITableViewStyleGrouped];
以及以下内容:
- (id) initWithStyle:(UITableViewStyle)style
{
self = [super initWithStyle:style];
if (self) {
[self setFrame:CGRectMake(85, 153, 235, 250)];
}
return self;
}
您还可以使用以下(示例)自定义方法:您正在调用的密钥:
<强>
self = [super initWithStyle:UITableViewStyleGrouped];
强>
- (id) initWithSomeCustomMessage:(NSString*)message
{
self = [super initWithStyle:UITableViewStyleGrouped];
if (self) {
[self setFrame:CGRectMake(85, 153, 235, 250)];
self.customMessage = message;
}
return self;
}
答案 1 :(得分:2)
您需要在ViewController中将MyPocketTableView设置为
MyPocketTableView * myPocketTableView = [[MyPocketTableView alloc] initWithStyle:UITableViewStyleGrouped];
之后,在MyPocketViewcontroller中使用以下代码
- (id) initWithStyle:(UITableViewStyle)style
{
self = [super initWithStyle:style];
if (self) {
[self setFrame:CGRectMake(85, 153, 235, 250)];
}
return self;
}
别忘了在MyPocketViewController类中添加UITableView Delegate和Data Source
答案 2 :(得分:1)
您正在设置“自我”两次。这将导致“自我”被覆盖。
self = [super initWithFrame:frame];
self = [super initWithStyle:style];
为了维护“init链”,你需要调用你所在的“init”函数。像这样:
- (id) initWithFrame:(CGRect)frame style:(UITableViewStyle) style {
self = [super initWithFrame:frame style:style];
if(self) {
self.dataSource = self;
self.delegate = self;
}
return self;
}