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

self = [super initWithStyle:style]style : ( UITableViewStyle ) style を init メソッド定義に追加できません。

セレクター initWithStyle を宣言する「UITableView」の @interface が表示されません。

クラスが作成されたときのデフォルトの 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 Delegate と Data Source を追加することを忘れないでください

于 2012-10-15T11:38:22.910 に答える
1

「自己」を2回設定しています。これにより、「self」が上書きされます。

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;

}
于 2012-10-15T00:21:24.900 に答える