设置UITableView的样式

时间:2012-10-14 23:43:03

标签: iphone objective-c ios uitableview

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

3 个答案:

答案 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)

  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 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;

}