UITableView.09 自定義cell :ide
注意:在建立一個故事版的時候,須要將控制器的class修改爲對應的class不然效果實現不了【如圖】ui
1.這段代碼就是用來設置cell所對應的xib,相似於綁定spa
// 1.想要使用文件包裏面的資源就要使用[NSBundle mainBundle]code
// 2.loadNibNamed的意思是加載一個xib文件,名字爲BookCellorm
cell=[[[NSBundle mainBundle]loadNibNamed:@"BookCell" owner:nil options:nil]lastObject];
2. 將xib中的Label顯示內容,用到下面的代碼。對象
1)取出對應的book對象blog
2)設置內容事件
// 覆蓋數據 Book *book=self.books[indexPath.row]; // 1.取出對應行的book對象 // 設置名稱 UILabel *nameLabel= (UILabel *)[cell viewWithTag:1]; // [cell viewWithTag]就是和對應的xib文件中的cell中的綁定tag爲1的東 西進行綁定 nameLabel.text=book.name; // 而後將獲得的名字和相對應的空間進行綁定 // 設置價格 UILabel *priceLabel=(UILabel *)[cell viewWithTag:2]; priceLabel.text=[NSString stringWithFormat:@"$%.2f",book.price];
3.設置cell的高度資源
#pragma mark 返回cell 的高度【設置cell的高度】 -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return 70; }
4.綁定監聽器get
1)建立一個按鈕collect而且設置tag
2)將collect 綁定target,而後設置@selector調用方法
UIButton *collect=(UIButton *)[cell viewWithTag:3]; //收藏按鈕 [collect addTarget:self action:@selector(collectBook:event:) forControlEvents:UIControlEventTouchUpInside]; // UIControlEventTouchDragInside --單擊事件
3)單機事件後調用方法爲collectBook:event
【步驟】 獲得觸摸事件對象 ---> 獲得觸摸點 ---> 獲得觸摸點在UITableView中的位置 ---> 獲得觸摸點在UITableView中的行號
#pragma mark 收藏 - (void)collectBook:(UIButton *)btn event:(UIEvent *)event // event 事件對象(包含了全部觸摸點) { UITableView *tableview=(UITableView *)self.view; // 若是是單點觸碰,就只有1個UITouch (獲取全部的觸摸點) NSSet *touches= [event allTouches];// [event allTouches] 獲取全部uitouch 事件,就是手指點擊事件。 //一個UITouch對象對應一根手指,能知道咱們手指位置 UITouch *touch=[touches anyObject]; // 由於touches裏面只存放了1個object因此調用anyobjet就能取出咱們須要的object // 獲取觸摸點再UITableView上面的位置 CGPoint position=[touch locationInView:tableview]; // 根據觸摸位置,獲得對應的行號 NSIndexPath *indexPath=[tableview indexPathForRowAtPoint:position]; NSLog(@"%d",indexPath.row); //根據行號,獲得對應的名字 Book *book=self.books[indexPath.row]; NSLog(@"%@",book.name); }
【方法2】:使用控制器連線方式
第一步:建立Xib。
第二步:在建立新的cell的時候,將owner設置爲self,就是調用本身的控制器
cell=[[[NSBundle mainBundle]loadNibNamed:@"BookCell" owner:self options:nil]lastObject];
第三步:ViewController.h中聲明方法爲按鈕單擊事件方法。而且在.m文件中建立方法。
第四步:返回Xib的控制器,設置Custom Class 設置爲本身的ViewController【如圖】
第五步:設置好後File's Owner右擊,會產生collectBook方法,與相對應的按鈕進行鏈接,鏈接Touch up Inside事件。
第六步:寫全方法。就能夠顯示了。
-(IBAction)collectBook { NSLog(@"-------"); }
【利弊分析】:這種方法簡單,可是耦合性太強。適合單頁面。
【第三種】:
第一步:建立xib拉好控件,而且設置Custom Class 爲空
第二步:建立1個類與Xib 文件名相同的類,此處用BookCell。
第三步:將xib中的控件進行拖拉綁定。如上圖。
第四步:取出內容
// 3.1 取出本行的book對象 Book *b= self.books[indexPath.row]; // 設置書名 cell.nameLabel.text=b.name; // 設置價格 cell.priceLabel.text=[NSString stringWithFormat:@"$%.1f",b.price];