我在表格视图中添加了一些UIButtons。 tableview存在于View中并具有其他按钮。在一个事件中,我试图禁用View中的所有butons,包括在tableview中以编程方式添加的那些。我能够禁用其他按钮,但我无法禁用我添加到表视图的按钮。
结构是这样的:
UITabbarController
|
|---> ViewController01
|*************************|---> View
|************************************|---> tableview
|
|---> ViewController02
**************************|---> View
**************************************|---> tableview
Table View部分占用视图,除了tableView之外,我还有其他UIButtons作为视图的一部分。最初我的视图中没有任何tableviews,视图中只有UIButtons。
我使用以下代码禁用UITabBarController中的所有UIButtons:
-(void) enableAllButtonsInTabBar:(BOOL)enable {
NSMutableArray* viewsArray01 = [NSMutableArray arrayWithArray:self.ViewController01.view.subviews];
NSMutableArray* viewsArray02 = [NSMutableArray arrayWithArray:self.ViewController02.view.subviews];
[viewsArray01 removeObject:self.ViewControlloer01.progressView];
[viewsArray02 removeObject:self.ViewController02.progressView];
for (UIButton* button in viewsArray01) {
[button setEnabled:enable];
}
for (UIButton* button in viewsArray02) {
[button setEnabled:enable];
}
}
现在我想实现相同的功能,但我无法访问我在ViewController01和ViewController02中以编程方式添加到表视图中的UIButtons。
虽然我试图使用以下方法隐藏它:
for (UITableView *view in viewsArray02) {
[view setHidden:YES];
}
但这不是我想要的。
答案 0 :(得分:1)
显然,Tableview单元格在屏幕上不再可见时会被释放。因此,当我尝试访问其他视图控制器(tabbar视图控制器)中的UIButtons时,无法再访问这些按钮。所以结束了这样做。
拥有我自己的NSMutableArray按钮,并在我想要的时候在其他视图控制器中访问它们。
@interface debugButton : NSObject
@property NSString * buttonTitle;
@property BOOL isEnabled;
@end
@implementation debugButton
@end
@property (strong, nonatomic) NSMutableArray *buttonsArray;
self.buttonsArray = [NSMutableArray array];
debugButton *button;
button = [[debugButton alloc] initWithTitle:@"item1" enable:YES];
button.buttonTitle = @"item2”;
[self.buttonsArray addObject:button];
答案 1 :(得分:0)
试试这个。
您应该将按钮设置为IBOutlet。 在.h:
@property (weak, nonatomic) IBOutlet UIButton *myButton;
在.m:
@synthesize myButton;
[myButton setEnabled:NO];
答案 2 :(得分:0)
鉴于按钮位于UITableViewCells中,表格视图单元格的子视图不包含在表格视图的子视图数组中。
我刚刚创建了一个简单的UITableView,它有一些单元格,里面有一些按钮。在调试器中打印self.view.subviews
,我得到以下结果:
<__NSArrayM 0x7b920e50>(
<UITableViewWrapperView: 0x7b933960; frame = (0 0; 320 568); gestureRecognizers = <NSArray: 0x7b933f20>; layer = <CALayer: 0x7b933c60>; contentOffset: {0, 0}; contentSize: {320, 568}>,
<_UITableViewCellSeparatorView: 0x7bd57cf0; frame = (16 307.5; 304 0.5); autoresize = W; layer = <CALayer: 0x7bd4b390>>,
<_UITableViewCellSeparatorView: 0x7bd4a070; frame = (16 351.5; 304 0.5); autoresize = W; layer = <CALayer: 0x7bd4d410>>,
<_UITableViewCellSeparatorView: 0x7bd5ea20; frame = (16 395.5; 304 0.5); autoresize = W; layer = <CALayer: 0x7bd4d7b0>>,
<_UITableViewCellSeparatorView: 0x7bd5c500; frame = (16 439.5; 304 0.5); autoresize = W; layer = <CALayer: 0x7bd4e6e0>>,
<_UITableViewCellSeparatorView: 0x7bd529b0; frame = (16 483.5; 304 0.5); autoresize = W; layer = <CALayer: 0x7bd5b650>>,
<_UITableViewCellSeparatorView: 0x7bd4d350; frame = (16 527.5; 304 0.5); autoresize = W; layer = <CALayer: 0x7bd5d9c0>>,
<_UITableViewCellSeparatorView: 0x7bd5ddd0; frame = (16 571.5; 304 0.5); autoresize = W; layer = <CALayer: 0x7bd5e7c0>>,
<_UITableViewCellSeparatorView: 0x7bd5de90; frame = (16 615.5; 304 0.5); autoresize = W; layer = <CALayer: 0x7bd5bd40>>,
<_UITableViewCellSeparatorView: 0x7bd54ac0; frame = (16 659.5; 304 0.5); autoresize = W; layer = <CALayer: 0x7bd4bf60>>,
<_UITableViewCellSeparatorView: 0x7bd56c40; frame = (16 703.5; 304 0.5); autoresize = W; layer = <CALayer: 0x7bd5d110>>,
<_UITableViewCellSeparatorView: 0x7bd5c6c0; frame = (16 747.5; 304 0.5); autoresize = W; layer = <CALayer: 0x7bd5c740>>,
<_UITableViewCellSeparatorView: 0x7bd5ecc0; frame = (16 791.5; 304 0.5); autoresize = W; layer = <CALayer: 0x7bd5eba0>>,
<_UITableViewCellSeparatorView: 0x7bd56170; frame = (16 835.5; 304 0.5); autoresize = W; layer = <CALayer: 0x7bd5ec00>>,
<_UITableViewCellSeparatorView: 0x7bd561f0; frame = (16 879.5; 304 0.5); autoresize = W; layer = <CALayer: 0x7bd56270>>,
<UIImageView: 0x7bd52ea0; frame = (317.5 561; 2.5 7); alpha = 0; opaque = NO; autoresize = LM; userInteractionEnabled = NO; layer = <CALayer: 0x7bd52f20>>,
<UIImageView: 0x7bd52620; frame = (313 565.5; 7 2.5); alpha = 0; opaque = NO; autoresize = TM; userInteractionEnabled = NO; layer = <CALayer: 0x7bd52940>>
)
正如您所看到的,其中没有任何单元格或内容属于&#39;子视图的一部分。 tableview。
打印出[self.view recursiveDescription]
会显示:
<UITableView: 0x7daea400; frame = (0 0; 320 568); clipsToBounds = YES; autoresize = W+H; gestureRecognizers = <NSArray: 0x7b9331f0>; layer = <CALayer: 0x7b932b80>; contentOffset: {0, -64}; contentSize: {320, 264}>
| <UITableViewWrapperView: 0x7b933960; frame = (0 0; 320 568); gestureRecognizers = <NSArray: 0x7b933f20>; layer = <CALayer: 0x7b933c60>; contentOffset: {0, 0}; contentSize: {320, 568}>
| | <UITableViewCell: 0x7bd5df40; frame = (0 220; 320 44); autoresize = W; layer = <CALayer: 0x7bd5dda0>>
| | | <UITableViewCellContentView: 0x7bd5e110; frame = (0 0; 320 43.5); gestureRecognizers = <NSArray: 0x7bd5e320>; layer = <CALayer: 0x7bd5e180>>
| | | | <UIButton: 0x7bd5e370; frame = (0 0; 0 0); opaque = NO; layer = <CALayer: 0x7bd5e470>>
| | | <_UITableViewCellSeparatorView: 0x7bd5e520; frame = (16 43.5; 304 0.5); layer = <CALayer: 0x7bd5e5a0>>
| | <UITableViewCell: 0x7bd5d140; frame = (0 176; 320 44); autoresize = W; layer = <CALayer: 0x7bd4d320>>
| | | <UITableViewCellContentView: 0x7bd5d310; frame = (0 0; 320 43.5); gestureRecognizers = <NSArray: 0x7bd5d520>; layer = <CALayer: 0x7bd5d380>>
| | | | <UIButton: 0x7bd5d570; frame = (0 0; 0 0); opaque = NO; layer = <CALayer: 0x7bd5d670>>
| | | <_UITableViewCellSeparatorView: 0x7bd5d720; frame = (16 43.5; 304 0.5); layer = <CALayer: 0x7bd5d7a0>>
| | <UITableViewCell: 0x7bd5b420; frame = (0 132; 320 44); autoresize = W; layer = <CALayer: 0x7bd52980>>
| | | <UITableViewCellContentView: 0x7bd56300; frame = (0 0; 320 43.5); gestureRecognizers = <NSArray: 0x7bd57ac0>; layer = <CALayer: 0x7bd56370>>
| | | | <UIButton: 0x7bd55a20; frame = (0 0; 0 0); opaque = NO; layer = <CALayer: 0x7bd57b00>>
| | | <_UITableViewCellSeparatorView: 0x7bd57990; frame = (16 43.5; 304 0.5); layer = <CALayer: 0x7bd57a10>>
| | <UITableViewCell: 0x7bd4b980; frame = (0 88; 320 44); autoresize = W; layer = <CALayer: 0x7bd4e540>>
| | | <UITableViewCellContentView: 0x7bd4bb10; frame = (0 0; 320 43.5); gestureRecognizers = <NSArray: 0x7bd56610>; layer = <CALayer: 0x7bd4fec0>>
| | | | <UIButton: 0x7bd48140; frame = (0 0; 0 0); opaque = NO; layer = <CALayer: 0x7bd253b0>>
| | | <_UITableViewCellSeparatorView: 0x7bd57bf0; frame = (16 43.5; 304 0.5); layer = <CALayer: 0x7bd56f10>>
| | <UITableViewCell: 0x7bd5c770; frame = (0 44; 320 44); autoresize = W; layer = <CALayer: 0x7bd5c4d0>>
| | | <UITableViewCellContentView: 0x7bd5cac0; frame = (0 0; 320 43.5); gestureRecognizers = <NSArray: 0x7bd5cdd0>; layer = <CALayer: 0x7bd5cb30>>
| | | | <UIButton: 0x7bd5ce20; frame = (0 0; 0 0); opaque = NO; layer = <CALayer: 0x7bd5cf20>>
| | | <_UITableViewCellSeparatorView: 0x7bd5d050; frame = (16 43.5; 304 0.5); layer = <CALayer: 0x7bd49da0>>
| | <UITableViewCell: 0x7bd55890; frame = (0 0; 320 44); autoresize = W; layer = <CALayer: 0x7bd55bc0>>
| | | <UITableViewCellContentView: 0x7bd56100; frame = (0 0; 320 43.5); gestureRecognizers = <NSArray: 0x7bd56a30>; layer = <CALayer: 0x7bd562d0>>
| | | | <UIButton: 0x7bd56aa0; frame = (0 0; 0 0); opaque = NO; layer = <CALayer: 0x7bd56ce0>>
| | | <_UITableViewCellSeparatorView: 0x7bd578f0; frame = (16 43.5; 304 0.5); layer = <CALayer: 0x7bd57a90>>
| <_UITableViewCellSeparatorView: 0x7bd57cf0; frame = (16 307.5; 304 0.5); autoresize = W; layer = <CALayer: 0x7bd4b390>>
| <_UITableViewCellSeparatorView: 0x7bd4a070; frame = (16 351.5; 304 0.5); autoresize = W; layer = <CALayer: 0x7bd4d410>>
| <_UITableViewCellSeparatorView: 0x7bd5ea20; frame = (16 395.5; 304 0.5); autoresize = W; layer = <CALayer: 0x7bd4d7b0>>
| <_UITableViewCellSeparatorView: 0x7bd5c500; frame = (16 439.5; 304 0.5); autoresize = W; layer = <CALayer: 0x7bd4e6e0>>
| <_UITableViewCellSeparatorView: 0x7bd529b0; frame = (16 483.5; 304 0.5); autoresize = W; layer = <CALayer: 0x7bd5b650>>
| <_UITableViewCellSeparatorView: 0x7bd4d350; frame = (16 527.5; 304 0.5); autoresize = W; layer = <CALayer: 0x7bd5d9c0>>
| <_UITableViewCellSeparatorView: 0x7bd5ddd0; frame = (16 571.5; 304 0.5); autoresize = W; layer = <CALayer: 0x7bd5e7c0>>
| <_UITableViewCellSeparatorView: 0x7bd5de90; frame = (16 615.5; 304 0.5); autoresize = W; layer = <CALayer: 0x7bd5bd40>>
| <_UITableViewCellSeparatorView: 0x7bd54ac0; frame = (16 659.5; 304 0.5); autoresize = W; layer = <CALayer: 0x7bd4bf60>>
| <_UITableViewCellSeparatorView: 0x7bd56c40; frame = (16 703.5; 304 0.5); autoresize = W; layer = <CALayer: 0x7bd5d110>>
| <_UITableViewCellSeparatorView: 0x7bd5c6c0; frame = (16 747.5; 304 0.5); autoresize = W; layer = <CALayer: 0x7bd5c740>>
| <_UITableViewCellSeparatorView: 0x7bd5ecc0; frame = (16 791.5; 304 0.5); autoresize = W; layer = <CALayer: 0x7bd5eba0>>
| <_UITableViewCellSeparatorView: 0x7bd56170; frame = (16 835.5; 304 0.5); autoresize = W; layer = <CALayer: 0x7bd5ec00>>
| <_UITableViewCellSeparatorView: 0x7bd561f0; frame = (16 879.5; 304 0.5); autoresize = W; layer = <CALayer: 0x7bd56270>>
| <UIImageView: 0x7bd52ea0; frame = (317.5 561; 2.5 7); alpha = 0; opaque = NO; autoresize = LM; userInteractionEnabled = NO; layer = <CALayer: 0x7bd52f20>>
| <UIImageView: 0x7bd52620; frame = (313 565.5; 7 2.5); alpha = 0; opaque = NO; autoresize = TM; userInteractionEnabled = NO; layer = <CALayer: 0x7bd52940>>
最简单的方法是创建一个BOOL属性/实例变量,根据您是否要启用或禁用按钮,设置为YES / NO,以及创建时使用tableView:cellForRowAtIndexPath:
方法/自定义单元格,只需将按钮启用状态设置为此变量即可。
每当您希望更改状态时,请更新该变量并致电reloadData
,您的单元格也应相应更新。