0

我有一个 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;
}

我不能在 init 方法定义中添加 style : (UITableViewStyle) style,我也不能这样做,self = [super initWithStyle:style]因为它抱怨说

'UITableView' 没有可见的@interface 声明选择器 initWithStyle。

创建类时存在的默认 init 方法是- (id) initWithFrame:(CGRect)frame. MyPocketTableView 是 UITableView 的子类。

  @interface MyPocketTableView : UITableView <UITableViewDataSource,UITableViewDelegate>
4

3 回答 3

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;
}
于 2012-10-14T23:49:30.350 回答
2
  1. 您需要将 ViewController 中的 MyPocketTableView 设置为

    MyPocketTableView * myPocketTableView = [[MyPocketTableView alloc] initWithStyle:UITableViewStyleGrouped];
    
  2. 之后,在 MyPocketViewcontroller 中使用以下代码

    - (id) initWithStyle:(UITableViewStyle)style 
    {
            self = [super initWithStyle:style];
            if (self) {
                    [self setFrame:CGRectMake(85, 153, 235, 250)];
             }
            return self;
    }
    
  3. 不要忘记在 MyPocketViewController 类中添加 UITableView 委托和数据源

于 2012-10-15T11:38:22.910 回答
1

您正在设置“自我”两次。这将导致“self”被覆盖。

self = [super initWithFrame:frame];
self = [super initWithStyle:style];

为了维护“初始化链”,您需要调用与您所在的相同的“初始化”函数。像这样:

- (id) initWithFrame:(CGRect)frame style:(UITableViewStyle) style {

    self = [super initWithFrame:frame style:style];
    if(self) {

        self.dataSource = self;
        self.delegate = self;

    }
    return self;

}
于 2012-10-15T00:21:24.900 回答