不過這個作法在 iOS 7 上卻失效了,因為 iOS 7 的 Cell 的 Subview 結構改變了,
所以之前的教學就失效了,因此再度為 iOS 7 多開一次教學。
首先照上次的教學先做一次看看現在的 Cell 的 Subview 結構變成了什麼?
在 iOS 7 的時候 Cell 的 Subview 竟然只剩下 UITableViewCellScrollView 一個!
那個其他的 view 去哪了?
不管怎樣,先看看 UITableViewCellScrollView 裡面有什麼東西,
用跟上次一樣的作法,log 看看 UITableViewCellScrollView 有什麼 subviews
- (void)layoutSubviews { [super layoutSubviews]; if (self.editing) { UIView *subview = self.subviews.lastObject; if ([self.subviews count] == 1 && [NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellScrollView"]) { NSLog(@"%@", subview.subviews); } } }
結果如下,竟然! UITableViewCellScrollView 內部是包著那些消失的 View!
既然這樣子就照著之前的作法將它給隱藏起來。
- (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; } }; UIView *subview = self.subviews.lastObject; if ([self.subviews count] == 1 && [NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellScrollView"]) { [subview.subviews NSEnumerationReverse } }
如果你需要支援 iOS7 以下的版本的話就可以這樣子用。
- (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; } }; UIView *subview = self.subviews.lastObject; if ([self.subviews count] == 1 && [NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellScrollView"]) { [subview.subviews enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:enumBlock]; return; } [self.subviews enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:enumBlock]; }
1 則留言:
張貼留言