【UIKit】UITableView.09 自定義cell

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];
相關文章
相關標籤/搜索