**
我們?cè)陂_發(fā)中經(jīng)常需要設(shè)置UITableView中的Cell的一些屬性,例如Cell的背景顏色,Cell內(nèi)部的Label的文字顏色等等.這時(shí)我們就會(huì)在我們?cè)趧?chuàng)建Cell后,緊接著就設(shè)置Cell的一些屬性,但是當(dāng)程序運(yùn)行后,卻會(huì)發(fā)現(xiàn)我們?cè)O(shè)置的這些屬性有的有效果,有的卻沒有.這是為什么呢?
**
下面我們打算設(shè)置 -->
1.Cell的背景顏色;
2.Cell內(nèi)部文字顏色;
以上兩個(gè)創(chuàng)建Cell后直接設(shè)置就有效果,而下面兩個(gè)卻沒有.這是為什么呢?
3.Cell內(nèi)部文字的顯示位置
4.TableView的分隔線左右縮進(jìn)一樣大小距離
例如: 在外界我們創(chuàng)建Cell(這里的Cell已經(jīng)是我們繼承自系統(tǒng)Cell的TWCityCell) -->
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
{
static NSString *ID = @"cityCell";
TWCityCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
if (cell == nil) {
cell = [[TWCityCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:ID];
cell.backgroundColor = [UIColor clearColor];//把cell的顏色設(shè)clearColor
cell.textLabel.textColor = [UIColor whiteColor];//把cell的文字顏色設(shè)白色
cell.selectionStyle = UITableViewCellSelectionStyleNone;//取消cell的選中狀態(tài)
// cell.textLabel.textAlignment = NSTextAlignmentCenter;這里設(shè)置無效,應(yīng)該要自定義cell,在layoutSubviews里調(diào)整
// cell.width -= 15;這里設(shè)置也無效
}
NSString *city = self.cityArray[indexPath.row];
cell.textLabel.text = city;
return cell;
}
自定義Cell
/*
我們想達(dá)到這樣一個(gè)效果 --> 讓UITableView顯示的分隔線左右都有一樣的間距(默認(rèn)這個(gè)分隔線在顯示出來是左邊會(huì)縮進(jìn)15,右邊是頂?shù)筋^和tableView一樣寬).
>首先我們要知道 -->
1.分隔線是屬于Cell內(nèi)部的,Cell的寬度一開始是默認(rèn)和tableView一樣寬,我們現(xiàn)在想要是想要更改cell的寬度來達(dá)到縮短分隔線的目的
(tableView寬度不變,Cell寬度縮短15,那么分隔線顯示出來時(shí)右邊也就縮短15了,前提是要讓Cell的背景顏色為clearColor,這樣才不會(huì)露餡);
2.Cell設(shè)置自身的frame時(shí)會(huì)調(diào)用自己的- (void)setFrame:(CGRect)frame方法, 并且這個(gè)cell的frame是在這個(gè)方法里面調(diào)用
[super setFrame:frame]時(shí)就給你設(shè)置了,(CGRect)frame參數(shù)就是tableView的frame.
>實(shí)現(xiàn) -->
我們?cè)? (void)setFrame:(CGRect)frame方法中你拿到這個(gè)tableView的frame和調(diào)用[super setFrame:frame]來設(shè)置Cell的frame之間就來修改這個(gè)傳進(jìn)來的frame參數(shù),
那么此刻你去設(shè)置Cell的frame時(shí)真實(shí)拿到的frame就是我們修改過的(默認(rèn)cell的分隔線在左邊是縮進(jìn)15的)
*/
- (void)setFrame:(CGRect)frame
{
frame.size.width -= 15;//在調(diào)用[super setFrame:frame]之前,就攔截傳進(jìn)來的tableView的frame并去修改它的寬度,而后系統(tǒng)利用這個(gè)frame設(shè)置Cell的寬度就是為你修改過的寬度了.
[super setFrame:frame];
}
- (void)layoutSubviews//調(diào)整Cell內(nèi)部的textLabel的位置
{
[super layoutSubviews];
self.textLabel.x = (self.width - self.textLabel.width) * 0.5;
}
總結(jié): -->
依我所見,Cell的有些屬性,當(dāng)Cell顯示出來時(shí),系統(tǒng)是會(huì)自動(dòng)去調(diào)用Cell內(nèi)部的某些方法去確定的,例如- (void)setFrame:(CGRect)frame和- (void)layoutSubviews;所以無論你在外界怎么設(shè)置,都會(huì)被當(dāng)系統(tǒng)調(diào)用Cell內(nèi)部的某些方法確定Cell的屬性后給覆蓋掉.