在cellForRowAtIndexPath中启动时无法获取UISwitch的状态?

时间:2011-05-31 02:01:15

标签: objective-c uitableview uiswitch

我发起了我的cellForRowAtIndexPath。它出现了,但是当我尝试从另一个类引用它时,它返回(null)。如果我在viewDidLoad中启动它,它可以工作,但它需要在UITableView中。

AddAlbumViewController:

// .h
IBOutlet UISwitch *privateSwitch;
@property (nonatomic, retain) IBOutlet UISwitch *privateSwitch;

// .m
@synthesize privateSwitch;

privateSwitch = [[UISwitch alloc] initWithFrame:CGRectMake(199, 8, 0, 0)];
[privateSwitch addTarget:self action:@selector(switchToggled:) forControlEvents: UIControlEventTouchUpInside];
[cell.contentView addSubview:privateSwitch];

SecondViewController:

// .m

TableViewAppDelegate *dataCeter = (TableViewAppDelegate *)[[UIApplication sharedApplication] delegate];
AddAlbumViewController *addAlbumViewController = [[AddAlbumViewController alloc] initWithNibName:@"AddAlbum" bundle:[NSBundle mainBundle]];
UIView *tempView = addAlbumViewController.view;

NSLog(@"privateSwitch: %@", addAlbumViewController.privateSwitch);

请帮助谢谢。

1 个答案:

答案 0 :(得分:1)

假设这段代码:

privateSwitch = [[UISwitch alloc] initWithFrame:CGRectMake(199, 8, 0, 0)];
[privateSwitch addTarget:self action:@selector(switchToggled:) forControlEvents:    UIControlEventTouchUpInside];
[cell.contentView addSubview:privateSwitch];

实际上在你的tableView:cellForRowAtIndexPath:中,当你试图查看privateSwitch时,甚至可能还没有调用该代码。 (我假设您在尝试记录之前从AddAlbumViewController的新实例中读取了privateSwitch,但是您将该代码保留了下来。)

在你的SecondViewController中,你正在创建一个AddAlbumViewController的新实例并从nib加载该视图,但是从你发布的代码中你实际上没有在屏幕上显示它(除非你把它留在了外面?)

另外,顺便说一句,你声明了一个名为privateSwitch的属性但是你没有使用它。