亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

可任意自定義的UITableViewCell

系統(tǒng) 2415 0

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

如何動態(tài)調(diào)整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表示視圖后面的任何內(nèi)容都不應(yīng)該繪制
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中間分割線的顏色。那又如何用一個圖片作為分割線背景呢?可以嘗試如下:
方法一:
先設(shè)置cell separatorColor為clear,然后把圖片做的分割線添加到自定義的custom cell上。

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

自定義首行Cell與其上面導(dǎo)航欄間距

      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;
}

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

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

      
        //
      
      
         檢查用戶點擊按鈕時的位置,并轉(zhuǎn)發(fā)事件到對應(yīng)的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方法會被觸發(fā),并且獲得一個indexPath參數(shù)。通過這個indexPath參數(shù),我們即可區(qū)分到底哪一行的附件按鈕發(fā)生了觸摸事件。

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

可任意自定義的UITableViewCell


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

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

【本文對您有幫助就好】

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

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产婷婷色综合成人精品 | 国国产自国偷自产第38页 | 九九视频在线看精品 | 国产精品久久久久久麻豆一区 | 亚洲精品福利在线观看 | 天天拍夜夜添久久精品免费 | 免费看黄色片视频 | 亚洲免费毛片 | 偷自拍视频区综合视频区 | 中文字幕三级久久久久久 | 久久精品国产精品亚洲婷婷 | 亚洲夂夂婷婷色拍ww47 | 成人精品视频一区二区在线 | 青青青青手机在线视频观看国产 | 亚洲精品美女久久久aaa | 免费精品久久久久久中文字幕 | 欧美久久xxxxxx影院 | 亚洲精品综合欧美一区二区三区 | 久久久久国产精品四虎 | 日本成人一区二区三区 | 四虎影视在线影院在线观看 | 成人免费观看网欧美片 | a毛片全部免费播放 | 天天干天天干天天干天天 | 青青青爽视频在线观看 | 亚洲国产精品第一区二区三区 | 久久午夜一区二区 | 久久精品国产精品青草 | 色综合欧美色综合七久久 | 亚洲欧美一区二区三区国产精品 | 综合亚洲欧美日韩一区二区 | 五月天天色 | 亚洲精品美女视频 | 曹逼网站| 看一级特黄a大片日本片黑人 | 天天综合色网 | 夜夜干天天操 | 色婷婷99综合久久久精品 | 欧美日韩在线精品成人综合网 | 国产欧美亚洲精品第一区 | 国产精品情侣久久婷婷文字 |