此教學在 iOS 7 上已經無效了,請改看隱藏 UITableViewCell 的 Edit Control [For iOS 7]
在 UITableViewCell 有一個欄位叫做 Edit Control,這是根據官方的文件所得知的,
不過常常會有需要自定一個當多選 Cell 的時候的圖片,如下圖:
不過 Edit Control 卻是私有的 Code,你無法自定它,
既然不能自定原始的 Edit Control,那就將它藏起來,並做一個新的給覆蓋過去就好了,
那麼要怎麼做了?這篇教學正是教你怎麼做到這件事。
首先就是建立一個繼承 UITableViewCell 的 Class,接下來是讓它與 UITableView 做連動,
要如何做連動我就不教了,這不是本篇的重點,
再來就是在這個 Class 動點手腳了,動手腳的就是 - layoutSubviews 這個 Method,
先 log 現在 cell 裡的 subviews 的資訊
- (void)layoutSubviews { [super layoutSubviews]; if (self.editing) { NSLog(@"%@", self.subviews); } }
這時候得到的資訊如下圖:
其中 UITableViewCellEditControl 正是 Edit Control 的 Class 名稱,
不過 UITableViewCellEditControl 是私有的 Class,所以無法使用 isKindOfClass: 做判斷,
所以改用另一個繞路的方式來判斷,就是 NSStringFromClass() 將 Class 名稱轉成 NSString 之後再使用 isEqualToString: 去判斷,
這時候再把 Code 寫成下面的樣式:
- (void)layoutSubviews { [super layoutSubviews]; if (!self.editing) { return; } void (^enumBlock) (id, NSUInteger, BOOL *) = ^(UIView *subview, NSUInteger idx, BOOL *stop) { if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellEditControl"]) { [subview setHidden:YES]; *stop = YES; } }; [self.subviews enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:enumBlock]; }
這時候礙眼的 Edit Control 就從這樣子:
變成了這樣子了:
這時候就能隨你去增加圖片來取代原始的 Edit Control 了。
本篇教學就到這邊告一個段落,下一次會是" Array 的列舉方法" 的教學,敬請期待。
沒有留言:
張貼留言