開發(fā)的時候,經(jīng)常會遇到各式各樣的問題桨螺,一般而言我們都是跟隨著UI的步子開始進行畫畫宾符,例如tableView 左滑刪除按鈕,有時候我們用的是系統(tǒng)自帶的刪除(如:淘寶的左滑)灭翔,但是如果系統(tǒng)提供的根本滿足不了需求魏烫,那么如何是好呢?請聽我娓娓道來肝箱。請繼續(xù)往下看则奥。
例如:淘寶的左滑
需求:
實現(xiàn)的效果:
看到Cell上有這個視圖,那就一定能找的到
我們在tableView的點擊刪除的代理方法 里邊遍歷cell的子視圖
// 編輯樣式
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
return UITableViewCellEditingStyleDelete;
}
// 點擊刪除的代理方法
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
for (UIView * view cell.subviews) {
NSLog(@"%@", view);
}
}
那么問題來了狭园。UITableViewCellDeleteConfirmationView為啥要在要在tableView的點擊刪除的代理方法里邊找??
原因分析:
當(dāng)刪除按鈕沒有顯示的情況下,cell子視圖里是沒有這個視圖的糊治,可以肯定是在左滑的時候系統(tǒng)把它加上去的唱矛,我們可重寫cell的 insertSubview:atIndex: 這個方法,當(dāng)添加 delete view 的時候井辜,會進這個方法绎谦,那么可以在此方法中對它進行修改窃肠。
- (void)insertSubview:(UIView *)view atIndex:(NSInteger)index {
[super insertSubview:view atIndex:index];
if ([view isKindOfClass:NSClassFromString(@"UITableViewCellDeleteConfirmationView")]) {
view.top = 10;
view.height = self.height - 10;
for (UIButton *btn in view.subviews) {
if ([btn isKindOfClass:[UIButton class]]) {
[btn setBackgroundColor:[UIColor colorWithHexString:@"F2F2F2"]];
[btn setTitle:nil forState:UIControlStateNormal];
[btn setImage:[UIImage imageNamed:@"list_deleting"] forState:UIControlStateNormal];
[btn setTintColor:[UIColor whiteColor]];
}
}
}
}
之前又在網(wǎng)上看到有這么一位大神的文章冤留,文章鏈接點我纤怒,為此還花錢買了這位大神寫的電子版的書籍,不得不說 代碼寫的賊6瓜贾,但是我發(fā)現(xiàn)我如此繼承他祭芦,那么上拉的時候就不行了,就不能拉了咸灿。可能是他里面的做了什么审胸,看到那里面的各種算,我整個都懵逼了。這麻蛋得改到猴年馬月呀静浴。
作者實現(xiàn)效果
放在我們項目中出現(xiàn)的問題,不能往上拽了得问。就貌似tableView高度寫死了一樣椭赋。其實代碼并沒有這樣干哪怔。
附上demo:
請使勁戳我