在似乎永无止境地努力学习有关iphone开发的更多信息的过程中,我一直在尝试通过Apples开发人员网站获得的一些源代码。我正在使用的特定示例是Core Data Books,位于here中。 DetailViewController和AddViewController是通过编程方式制作的,因为它们没有任何xib文件。我的问题是关于在不使用IB的情况下以编程方式向 View 中添加内容。我想在UITableView下方放置一个UISwitch,该UISwitch在DetailView中具有有关特定书籍的详细信息。我该怎么做呢?到目前为止,这是我尝试过的:

在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”的本地声明隐藏了实例变量。但是,即使有这些 yield ,UISwitch也可以弹出,但是当我移动或使用它时,它似乎并不能充分发挥作用。对于我的操作,如下所示:
- (IBAction)flip:(id)sender {
if (onoff.on) NSLog(@"On");
else  NSLog(@"Off");
 }

无论何时打开开关,控制台都应打开,而关闭时,控制台则应关闭。对?每当我移动它时,它都会在控制台中重复播放,然后关闭。如果其打开或关闭,则仅显示。我到底在做什么错?请帮忙!谢谢

最佳答案

编译器正在尝试帮助您。您将覆盖viewDidLoad;中的onoff实例变量,因此永远不会设置。在-flip:方法中,您引用的是nil Controller 。有两种方法可以解决此问题:

(a)摆脱onoff的本地声明,只使用您的实例变量

(b)将sender参数强制转换为-flip:作为UISwitch,并访问它:

- (IBAction) flip: (id) sender {
    UISwitch *onoff = (UISwitch *) sender;
    NSLog(@"%@", onoff.on ? @"On" : @"Off");
}

关于iphone - 以编程方式创建UISwitch,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2025842/

10-14 22:00