在一个看似永无止境的努力来了解更多关于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];
scroll top