欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

可任意自定義的UITableViewCell

系統 2496 0

UITableView的強大更多程度上來自于可以任意自定義UITableViewCell單元格。通常,UITableView中的Cell是動態的,在使用過程中,會創建一個Cell池,根據每個cell的高度(即tableView:heightForRowAtIndexPath:返回值),以及屏幕高度計算屏幕中可顯示幾個cell。而進行自定義TableViewCell無非是采用代碼實現或采用IB編輯nib文件來實現兩種方式,本文主要收集代碼的方式實現各種cell自定義。

如何動態調整Cell高度

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

static NSString *CellIdentifier = @" Cell " ;

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
UILabel *label = [[UILabel alloc] initWithFrame:CGRectZero];
label.tag = 1 ;
label.lineBreakMode = UILineBreakModeWordWrap;
label.highlightedTextColor = [UIColor whiteColor];
label.numberOfLines = 0 ;
label.opaque = NO; // 選中Opaque表示視圖后面的任何內容都不應該繪制
label.backgroundColor = [UIColor clearColor];
[cell.contentView addSubview:label];
[label release];
}

UILabel *label = (UILabel *)[cell viewWithTag: 1 ];
NSString *text;
text = [textArray objectAtIndex:indexPath.row];
CGRect cellFrame = [cell frame];
cellFrame.origin = CGPointMake( 0 , 0 );

label.text = text;
CGRect rect = CGRectInset(cellFrame, 2 , 2 );
label.frame = rect;
[label sizeToFit];
if (label.frame.size.height > 46 ) {
cellFrame.size.height = 50 + label.frame.size.height - 46 ;
}
else {
cellFrame.size.height = 50 ;
}
[cell setFrame:cellFrame];

return cell;
}
      - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
      
{
UITableViewCell *cell = [self tableView:tableView cellForRowAtIndexPath:indexPath];
return cell.frame.size.height;
}

如何用圖片自定義Table Separeator分割線
一般地,利用類似[tableView? setSeparatorColor: [UIColor redColor]];語句即可修改cell中間分割線的顏色。那又如何用一個圖片作為分割線背景呢?可以嘗試如下:
方法一:
先設置cell separatorColor為clear,然后把圖片做的分割線添加到自定義的custom cell上。

方法二:
在cell里添加一個像素的imageView后將圖片載入進,之后設置tableView.separatorStyle = UITableViewCellSeparatorStyleNone

自定義首行Cell與其上面導航欄間距

      tableView.tableHeaderView = [[[UIView alloc] initWithFrame:CGRectMake(
      
        0
      
      ,
      
        0
      
      ,
      
        5
      
      ,
      
        20
      
      )] autorelease];
    

自定義UITableViewCell的accessory樣式
? ? ? 默認的accessoryType屬性有四種取值:UITableViewCellAccessoryNone、UITableViewCellAccessoryDisclosureIndicator、UITableViewCellAccessoryDetailDisclosureButton、UITableViewCellAccessoryCheckmark。如果想使用自定義附件按鈕的其他樣式,則需使用UITableView的 accessoryView 屬性來指定。

      UIButton *button;
      
if (isEditableOrNot) {
UIImage *image = [UIImage imageNamed: @" delete.png " ];
button = [UIButton buttonWithType:UIButtonTypeCustom];
CGRect frame = CGRectMake( 0.0 , 0.0 ,image.size.width,image.size.height);
button.frame = frame;
[button setBackgroundImage:image forState:UIControlStateNormal];
button.backgroundColor = [UIColor clearColor];
cell.accessoryView = button;
} else {
button = [UIButton buttonWithType:UIButtonTypeCustom];
button.backgroundColor = [UIColor clearColor];
cell.accessoryView = button;
}

以上代碼僅僅是定義了附件按鈕兩種狀態下的樣式,問題是現在這個自定義附件按鈕的事件仍不可用。即事件還無法傳遞到UITableViewDelegate的accessoryButtonTappedForRowWithIndexPath方法上。當我們在上述代碼中在加入以下語句:
? ? ? ? ? ? ? [button addTarget:self action:@selector(btnClicked:event:) forControlEvents:UIControlEventTouchUpInside];
后,雖然可以捕捉到每個附件按鈕的點擊事件,但我們還無法進行區別到底是哪一行的附件按鈕發生了點擊動作!因為addTarget:方法最多允許傳遞兩個參數:target和event,這兩個參數都有各自的用途了(target指向事件委托對象,event指向所發生的事件)。看來只依靠Cocoa框架已經無法做到了。

? ? ? 但我們還是可以利用event參數,在自定義的btnClicked方法中判斷出事件發生在UITableView的哪一個cell上。因為UITableView有一個很關鍵的方法 indexPathForRowAtPoint ,可以根據觸摸發生的位置,返回觸摸發生在哪一個cell的indexPath。而且通過event對象,正好也可以獲得每個觸摸在視圖中的位置。

      
        //
      
      
         檢查用戶點擊按鈕時的位置,并轉發事件到對應的accessory tapped事件
      
      
        
- ( void )btnClicked:( id )sender event :( id ) event
{
NSSet *touches = [ event allTouches];
UITouch *touch = [touches anyObject];
CGPoint currentTouchPosition = [touch locationInView:self.tableView];
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:currentTouchPosition];
if (indexPath != nil)
{
[self tableView:self.tableView accessoryButtonTappedForRowWithIndexPath:indexPath];
}
}

這樣,UITableView的accessoryButtonTappedForRowWithIndexPath方法會被觸發,并且獲得一個indexPath參數。通過這個indexPath參數,我們即可區分到底哪一行的附件按鈕發生了觸摸事件。

      - (
      
        void
      
      )tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath
      
{
int *idx = indexPath.row;
// 這里加入自己的邏輯
}
?

可任意自定義的UITableViewCell


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 成人国产在线看 | 精品无人区乱码一区二区三区手机 | 亚洲欧洲日本在线 | www.福利视频| 亚洲第一激情 | 色噜噜视频 | 日韩深夜福利视频 | av网址在线播放 | 黄色一级网站 | 激情综合视频 | 91精品国产综合久久精品 | 一区二区在线免费观看 | www.天天操| 欧美精品一区二区三区在线 | 台湾av在线| 国产a久久精品一区二区三区 | 五月婷婷社区 | 国产精品成人av | 亚洲操片 | 欧美les免费观看网站 | 国产精品亚洲va在线观看 | 亚洲综合精品一区二区三区中文 | 日本黄页在线观看免费 | aaaaaaa片毛片免费观看 | 欧美精品网站 | 在线麻豆视频 | 午夜小电影 | 亚洲A片V一区二区三区有声 | 三片在线观看 | 成在线人免费视频一区二区三区 | 国产精品精品 | 亚洲三级视频 | 久久综合九色婷婷97 | 美女在线视频一区二区 | 亚洲精品在线观看视频 | 狙击兵2通古电影高清 | 在线观看欧美成人 | 蜜桃官网 | wwwbnb89| 97精品超碰一区二区三区 | 99视频精品|