创建UISwitch编程
-
19-09-2019 - |
题
在一个看似永无止境的努力来了解更多关于iPhone开发,我一直在与一些可通过苹果开发者网站的源代码玩耍。我一起工作的具体的例子是核心数据书籍,发现这里一>。该DetailViewController和AddViewController是编程制作,因为没有他们的任何XIB文件。我的问题是有关编程添加的东西视图不使用IB。我想提出一个UISwitch有关于某本书在的DetailView详细信息的UITableView的下方。我该怎么做呢?这是我到目前为止已经试过:
在AddViewController,我设置的UISwitch:
@interface AddViewController : DetailViewController {
id <AddViewControllerDelegate> delegate;
UISwitch *onoff;
}
@property (nonatomic, assign) id <AddViewControllerDelegate> delegate;
@property (nonatomic, retain) IBOutlet UISwitch *onoff;
我还设置一个IBAction为:
- (IBAction)flip:(id)sender;
然后我合成它在AddViewController.m文件,但没有任何反应。我只需要设置开关让这个我可以控制它从我的IBAction为我设置的确。我知道这是令人尴尬的简单,但我不能弄明白。因此,任何帮助将不胜感激!感谢
修改1
因此,我实现的代码,因为我是定向到viewDidLoad中,像这样:
- (void)viewDidLoad {
[super viewDidLoad];
UISwitch *onoff = [[UISwitch alloc] initWithFrame: CGRectZero];
[onoff addTarget: self action: @selector(flip:) forControlEvents:UIControlEventValueChanged];
// Set the desired frame location of onoff here
[self.view addSubview: onoff];
和它抛出两个警告说,“ONOFF”的本地声明隐藏实例变量。但即使有这些收益,在UISwitch弹出就好了,但是当我移动它,或者用它,它看起来并不像它工作充分。对于我的行动看起来像这样的:
- (IBAction)flip:(id)sender {
if (onoff.on) NSLog(@"On");
else NSLog(@"Off");
}
每当开关接通时,在控制台应该阅读,并且当其关闭时,控制台应该读出。对?每当我动它,它只是重复控制台,关闭。如果其上,或者如果它的关闭,那只能说明关闭。世界上什么是我做错了什么?请帮忙!感谢
解决方案
在编译器试图帮助你。你重写ONOFF实例变量在viewDidLoad;
因此,从来没有得到设定。在您的-flip:方法,你引用一个零控制器。有两种方法来解决这个:
(一)摆脱ONOFF的本地声明的,只是用你的实例变量
(B)铸造发件人参数-flip:作为UISwitch
,并访问:
- (IBAction) flip: (id) sender {
UISwitch *onoff = (UISwitch *) sender;
NSLog(@"%@", onoff.on ? @"On" : @"Off");
}
其他提示
史蒂夫,我很抱歉,如果我误解了你的问题。你真的创建UISwitch
并将其添加到视图层次?控制器的-loadView
或-viewDidLoad
实现应该有类似下面的代码:
// Use the ivar here
onoff = [[UISwitch alloc] initWithFrame: CGRectZero];
[onoff addTarget: self action: @selector(flip:) forControlEvents: UIControlEventValueChanged];
// Set the desired frame location of onoff here
[self.view addSubview: onoff];
[onoff release];