yat*_*dam 2 uitableview ios ios7.1
我开发了一个应用程序.并更改了删除按钮的默认红色.它工作得很清楚.但是在我升级我的iPad iOS 7.1.2之后,它的功能并不多.这是我用过的代码
for (UIView *subview in self.subviews) {
for(UIView *subview2 in subview.subviews){
if ([NSStringFromClass([subview2 class]) isEqualToString:@"UITableViewCellDeleteConfirmationView"] ||) {
((UIView*)[subview2.subviews firstObject]).backgroundColor=[UIColor blueColor];
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 7
问题是您正在尝试在错误的时间访问UITableViewCellDeleteConfirmationButton.
似乎Apple更改了实现,以便在触发willTransitionToState:之后,并在触发didTransitionToState之前,实际构造按钮并将其添加到视图层次结构中 :
访问didTransitionToState中的按钮:为时已晚.它在拖动时会有原始颜色,只有在完成滑动后才会改变颜色.
解决方法是在线程的运行循环中排队方法,而不是立即执行它,允许操作系统同时添加删除按钮视图.
- (void)willTransitionToState:(UITableViewCellStateMask)state
{
if ((state & UITableViewCellStateShowingDeleteConfirmationMask) == UITableViewCellStateShowingDeleteConfirmationMask)
{
[self performSelector:@selector(setupDeleteButton) withObject:nil afterDelay:0];
}
}
- (void)setupDeleteButton
{
[self recurseToDeleteButtonInViews:[self subviews]];
}
- (void)recurseToDeleteButtonInViews:(NSArray *)subviews
{
for (UIView *subview in subviews)
{
if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellDeleteConfirmationButton"]){
// You just found your button!
// Do what ever you want with it!
return;
}
if ([[subview subviews] count] > 0){
[self recurseToDeleteButtonInViews:[subview subviews]];
}
}
return;
}
Run Code Online (Sandbox Code Playgroud)
PS此代码与iOS 6.0不向后兼容,因为在iOS 7中更改了按钮视图的名称
| 归档时间: |
|
| 查看次数: |
1855 次 |
| 最近记录: |