2012-04-03 63 views
13

我剛開始開發iOS應用程序和Objective C本身,所以我可能有一個非常簡單的問題。使用Objective-C以編程方式創建TableVIew iOS

目前我有下面的方法,從工具欄按鈕點擊調用。該方法設計用於在框架變量fr中創建表格視圖。

- (IBAction)addGolfer:(id)sender { 
    CGRect fr = CGRectMake(101, 45, 100, 416); 

    UITableView *tabrleView = [[UITableView alloc] 
     initWithFrame:fr 
     style:UITableViewStylePlain]; 

    tabrleView.autoresizingMask = 
     UIViewAutoresizingFlexibleHeight | 
     UIViewAutoresizingFlexibleWidth; 
    tabrleView.delegate = self; 
    tabrleView.dataSource = self; 
    [tabrleView reloadData]; 

    self.view = tableView; 
} 

調用此方法的結果不是我所期望的。表格視圖不是在「fr」框架中創建表格視圖,而是填充整個屏幕。

再次,我是全新的,並會欣賞任何答案和任何建議。謝謝!

回答

18

當您爲您的UITableViewdataSourcedelegate特性,這意味着,你必須至少寫這個方法dataSource

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath; 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section; 

如果你不這樣做,它會崩潰。摘要你會得到這個(這個代碼可能包含語法或邏輯錯誤 - 我寫在記事本):

@interface YourViewController : UIViewController <UITableViewDataSource, UITableViewDelegate> { 
    UITableView *firstTableView; 
    UITableView *secondTableView; 
} 

@end 

//

@implementation YourViewController 

#pragma mark - Objects Processing 

- (void)addGolfer:(UIBarButtonItem *)sender { 
    if (secondTableView) { 
     [secondTableView removeFromSuperView]; 
     secondTableView = nil; 
    } 

    secondTableView = [[UITableView alloc] initWithFrame:CGRectMake(101, 45, 100, 416)]; 
    secondTableView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; 
    secondTableView.delegate = self; 
    tabrleView.dataSource = self; 

    [self.view addSubview:secondTableView]; 
} 

#pragma mark - TableView DataSource Implementation 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    if (tableView == firstTableView) { // your tableView you had before 
     return 20; // or other number, that you want 
    } 
    else if (tableView == secondTableView) { 
     return 15; // or other number, that you want 
    } 
} 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *cellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
    if (cell == nil) 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; 

    cell.backgroundView = [[UIView alloc] init]; 
    [cell.backgroundView setBackgroundColor:[UIColor clearColor]]; 
    [[[cell contentView] subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)]; 

    if (tableView == firstTableView) { // your tableView you had before 
     // ... 
    } 
    else if (tableView == secondTableView) { 
     cell.titleLabel.text = [NSString stringWithFormat:@"Cell %d", indexPath.row + 1]; 
    } 

    return cell; 
} 

@end 
4

而不是設置UIViewController的視圖,添加tableView作爲子視圖。

相反的:

self.view = tableView; 

這樣做:

[self.view addSubview:tableView]; 

這將適當尊重您設置的框架。

+0

我這樣做,但現在沒有任何反應。 ---對不起,我現在得到一個錯誤。 – 2012-04-03 23:45:55

+0

可能是你拼寫'tabrleView'。它應該是'tableView'無處不在。 – DHamrick 2012-04-03 23:55:32

+0

是的,我做到了,因爲我有另一個TableView – 2012-04-03 23:57:33

16

第1步:添加委託UITableViewDataSource,UITableViewDelegate

@interface viewController: UIViewController<UITableViewDataSource,UITableViewDelegate> 
{ 
    UITableView *tableView; 
} 

步驟2:

-(void)viewDidLoad 
{ 
    tableView=[[UITableView alloc]init]; 
    tableView.frame = CGRectMake(10,30,320,400); 
    tableView.dataSource=self; 
    tableView.delegate=self; 
    tableView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; 
    [tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"]; 
    [tableView reloadData]; 
    [self.view addSubview:tableView]; 
} 

步驟3://屬性的tableview(行&列)

- 對於沒有在表

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return 10; 
} 
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    return 1; 
} 

//行 - 表頭高度,如果需要

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section 
{ 
    return 50; 
} 

// - 分配數據給單元格

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath] ; 

    if (cell == nil) 
    { 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
    } 
    cell.textLabel.text=[your_array objectAtIndex:indexPath.row]; ***(or)*** cell.textLabel.text = @"Hello"; 
    return cell; 
} 

// - 操作時觸摸細胞

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // Your custom operation 
}