将UITableView添加到UIVIewController的视图中

时间:2013-08-21 14:16:07

标签: iphone ios cocoa-touch uitableview uiviewcontroller

我正在尝试将UITableView作为子视图添加到我的UIViewController的视图中,但是我收到了错误:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Skema_Main___Controller setTableViewStyle:]: unrecognized selector sent to instance 0x9e41ce0'

这是我的代码:

Skema Main - Controller.h

@interface Skema_Main___Controller : UIViewController <UIPickerViewDelegate, UIPickerViewDataSource, UITableViewDataSource, UITableViewDelegate> {

    UIPickerView *pickerView;
    NSMutableArray *pickerArray;

}

// property and setter
@property (nonatomic) NSInteger week;
- (void)setWeekSelected:(NSInteger) weekSelected;

//UIPicker
@property (nonatomic, retain) UIPickerView *pickerView;
@property (nonatomic, retain) NSMutableArray *pickerArray;

//TableView
@property (nonatomic, retain) UITableView *skemaTableView;

// Main Dictionary
@property (nonatomic,strong) NSMutableDictionary *dataDictionary; // data

@end

Skema Main - Controller.m

(我从这里删除了很多不相关的东西,我也使用了UIPickerView)

...
@synthesize skemaTableView;
...

- (void)viewDidLoad
{
    [super viewDidLoad];


    // Set picker for week
    NSLog(@" %i", self.week);
    [self generateView:self.week];

    //TableView
    float screenWidth = [UIScreen mainScreen].bounds.size.width;
    skemaTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, screenWidth, 200) style:UITableViewStylePlain];
    skemaTableView.dataSource = self;
    skemaTableView.delegate = self;

    [self.view addSubview:skemaTableView];

}
...

4 个答案:

答案 0 :(得分:0)

尝试访问skemaTableView作为属性而不是实例变量:

self.skemaTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, screenWidth, 200)
                                                   style:UITableViewStylePlain];
self.skemaTableView.dataSource = self;
self.skemaTableView.delegate = self;

[self.view addSubview:self.skemaTableView];

答案 1 :(得分:0)

在设置表格视图时,您似乎没有引用self

[self setSkemaTableView:[[UITableView alloc] initWithFrame:CGRectMake(0, 0, screenWidth, 200) style:UITableViewStylePlain]];
[[self skemaTableView] setDataSource:self];
[[self skemaTableView] setDelegate:self];

[self.view addSubview:[self skemaTableView]];

答案 2 :(得分:0)

您的课程中是否有基本的委托和数据源方法?我看到你在.h文件中调用了它们,但你需要在.m文件中实际定义它们。

至少你需要包括......

    -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

    -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

    -(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

答案 3 :(得分:0)

合成skemaTableView时,您可以创建一个getter和一个setter函数,如下所示:

-(UITableView *) skemaTableView
{ 
   return skemaTableView;
}

-(void)setSkemaTableView:(UITableView*)newSkemaTableView
{
  if (newSkemaTableView!= skemaTableView)
  {
      skemaTableView = newSkemaTableView;
  }
}

因此,当您尝试在viewDidLoad方法中分配和初始化它时,您不会调用生成的setSkemaTableView方法。当你编码时:

[self setSkemaTableView:[[UITableView alloc] initWithFrame:CGRectMake(0, 0, screenWidth, 200) style:UITableViewStylePlain]];
[[self skemaTableView] setDataSource:self];
[[self skemaTableView] setDelegate:self];

代码调用生成的setter和getter。