質問

iPhone 開発についてさらに学ぶための終わりのない努力の中で、私は Apple 開発者の Web サイトから入手できるソース コードの一部を試してきました。私が取り組んでいる特定の例は Core Data Books です。 ここ. 。DetailViewController と AddViewController は、xib ファイルがないため、プログラムで作成されます。私の質問は、IB を使用せずにプログラムでビューに項目を追加することについてです。DetailView の特定の書籍に関する詳細情報を含む UISwitch を 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」のローカル宣言がインスタンス変数を非表示にするという 2 つの警告をスローします。しかし、それらの収益があるにもかかわらず、UISwitch は問題なくポップアップしますが、それを移動したり使用したりすると、完全に動作しているようには見えません。私のアクションは次のようになります。

- (IBAction)flip:(id)sender {
if (onoff.on) NSLog(@"On");  
else  NSLog(@"Off");  
 }

スイッチがオンのときは常にコンソールはオンを読み取り、オフのときはコンソールはオフを読み取る必要があります。右?それを移動すると、コンソールでオフの状態が繰り返されます。オンでもオフでも、誇示するだけです。いったい私は何を間違っているのでしょうか?助けてください!ありがとう

役に立ちましたか?

解決

コンパイラはあなたを助けようとしています。onoff インスタンス変数をオーバーライドしています。 viewDidLoad; したがって、それは決して設定されません。-フリップでは:メソッドでは、nil コントローラーを参照しています。これを修正するには 2 つの方法があります。

(a) onoff のローカル宣言を削除し、インスタンス変数だけを使用します。

(b) sender 引数を -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];
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top