iPhone開發學習筆記002——Xib設計UITableViewCell然後動態載入

來源:互聯網
上載者:User

(註:環境Mac OS X Lion 10.7.3 + Xcode 4.2.1 + iOS SDK 5.0.)
一、建立iOS Application工程,選擇Single View Application,不要選中Use Storyboard.假設指定的是product name和class prefix都是one,則完成後自動產生程式碼檢視如:




該應用預設載入的是oneViewController的view.雙擊oneViewController.xib,在該xib預設的view上面添加控制項UILabel、UIButton和一個UITableView,如所示:



在oneViewController標頭檔和*.m檔案中定義和聲明三個屬性label、button、tableViewCell前兩個對應xib介面上的label和button,最後一個對應於即將建立的xib檔案中的tableViewCell,並且將label和button屬性和介面上的控制項通過拖拽相互關聯,如:
oneViewController.h:



 oneViewController.m:




二、建立根view為UITableViewCell的xib檔案Cell.xib:
無法直接產生根view為UITableViewCell的xib檔案,可以通過先建立根view為UIView的xib檔案,然後將該xib的根view刪除,再從Library視窗中拖一個Table View Cell到該xib中做為該xib的根view.如:



剛產生的時候:



將上面的view刪除,拖一個table view cell代替,並且在該table view cell上面添加一個label和一個button,如:



 設定Table View Cell下面的Cell Label和Cell Button的view Tag分別為1和2:



 然後選中上面的File's owner,在identify inspector視圖Custom Class中選擇對應的載入類為oneViewController:



 並且從connections inspector下面的Outlets內的UITableViewCell對象tableViewCell與中間視圖視窗中的Objects下面的Table View Cell相拖拽串連:(圖XXX)



 在Attributes inspector中設定Table View Cell的identifier為:CellIdentifier:



儲存。

三、代碼中動態載入Table View Cell XIB:
開啟oneViewController.h讓oneViewController實現協議UITableViewDataSource,UITableViewDelegate,即:

 

oneViewController.m中實現下面的介面方法:


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return20;
}

// Row display. Implementers should *always* try to reuse cells by setting each cell's reuseIdentifier and querying for available reusable cells with
dequeueReusableCellWithIdentifier:
// Cell gets various attributes set automatically based on table (separators) and data source (accessory views, editing controls)
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    staticNSString *CustomCellIdentifier =@"CellIdentifier";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: CustomCellIdentifier];
    if (cell ==nil) {
        NSArray *nib = [[NSBundlemainBundle]loadNibNamed:@"Cell" owner:selfoptions:nil];
        //        if ([nib count] > 0) {
        //            cell = self.tableViewCell;
        //        } else {
        //            NSLog(@"failed to load CustomCell nib file!");
        //        }
        cell = [nib objectAtIndex:0]; // 注釋掉的和該句是兩種方式,在這裡兩種方式都行。但是如果沒有上面紅色處(圖XXX)的拖拽串連過程,這裡只能使用nib objectAtIndex方式。
    }
    NSUInteger row = [indexPathrow];

NSLog(@"++++++++++++++ jonesduan %s, cell row:%d", __func__, row);

    UILabel *cellLabel = (UILabel *)[cellviewWithTag:1];
    cellLabel.text = [NSStringstringWithFormat:@"cell index: %d", row];

    UIButton *cellButton = (UIButton *)[cellviewWithTag:2];
    [cellButton setTitleColor:[UIColorredColor]forState:UIControlStateNormal];
    [cellButton setTitleColor:[UIColororangeColor]forState:UIControlStateHighlighted];
    [cellButton setTitle:@"Press me!"forState:UIControlStateNormal];
    [cellButton setTitle:@"Pressed!"forState:UIControlStateHighlighted];   
    return cell;
}

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    // Modified by jonesduan.
    return80;
}

- (void)didReceiveMemoryWarning
{
    [superdidReceiveMemoryWarning];
    // Release any cached data, images, etc that aren't in use.
}

#pragma mark - View lifecycle
- (void)viewDidLoad
{
    [superviewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
    [self.labelsetBackgroundColor:[UIColorgrayColor]];
    [self.buttonsetTitleColor:[UIColorgreenColor]forState:UIControlStateNormal];
    [self.buttonsetTitleColor:[UIColororangeColor]forState:UIControlStateHighlighted];//這裡控制的是oneViewController.xib中的label和button,前面已經拖拽串連過。
}
這樣完成後。CMD + R運行一下看看,發現介面如所示:

 


並沒有顯示Cell.xib中的Cell Label和Cell Button,下面是最重要的一點,也是一個人研究了很久才知道的,即:選中oneViewController.xib中view下的子Table View,切換到connections inspector,將Table View的dataSource和delegate均與File's owner相拖拽進行串連。如:





連完後,再CMD + R運行看看,結果是不是就如所示了,




OK,成功!

總結:通過xib自訂view比較重要的一點就是這個view被哪個view controller使用,比如xxxViewController,就要在identity inspector中Custom Class指定對應的載入類為xxxViewController,然後選中File's owner(中間大視窗中的Placeholders下),並切換到connections inspector將Outlets下面的對象與中間大視窗中的Objects(與Placeholders同層級,在Placeholders下面)下的根視圖相串連。最後別忘了Table View的dataSource和delegate均與File's owner相拖拽進行串連。
APPLE開發最不習慣的就是拖拽串連,在此記錄一下作為個人蔘考,免得以後忘記了。

demo:http://download.csdn.net/detail/duanyipeng/4063778


 摘自 Code Heaven
 



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.