-1

RootViewController には、ボタン *flop1 があり、クリックするとセグエ *segPop を介して PopViewController が開き、選択が選択されてポップオーバーが閉じると、ボタン *flop1 の画像が変更されます。

同じ PopViewController を使用しながら、*flop1 のような複数のボタンを用意したいと考えています。

seque *segPop2 を介して、*flop2 を同じ PopViewController に接続しました。

RootViewController.m

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

if ([[segue identifier] isEqualToString:@"segPop"]) {
    currentPopoverSegue = (UIStoryboardPopoverSegue *)segue;
    pvc = [segue destinationViewController];
    [pvc setDelegate:self];
    [pvc setStrPassedValue:[tfUserText text]];
} else if ([[segue identifier] isEqualToString:@"segPop2"]) {
    currentPopoverSegue = (UIStoryboardPopoverSegue *)segue;
    pvc = [segue destinationViewController];
    [pvc setDelegate:self];
    [pvc setStrPassedValue:[tfUserText text]];
}
}

// PopViewControllerDelegate callback function
- (void)dismissPop:(NSString *)value {
NSString *imagefile;
imagefile = [NSString stringWithFormat:@"%@.png",value];
[flop1 setImage:[UIImage imageNamed:imagefile] forState:UIControlStateNormal];
[[currentPopoverSegue popoverController] dismissPopoverAnimated: YES]; // dismiss the popover
}

@end

IF ELSE ステートメントを作成する方法

- (void)dismissPop:(NSString *)value {

*flop1 の画像も変更されないようにしながら、*flop2 ボタンに新しい画像を追加するには?

これがすべて面倒に見えたらごめんなさい。私はプログラミング教育を受けておらず、これらすべてを模倣から試みています。

ありがとう

4

1 に答える 1

1

この方法では:

 -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

senderセグエを呼び出したオブジェクトへのポインタです(あなたの場合はボタン)。popoverViewController でプロパティを定義できます。

@property (strong, nonatomic) UIButton* buttonThatInvokedMe;

あなたの呼び出しボタンに設定しますprepareForSegue

[pvc setButtonThatInvokedMe:sender];

そして、それを変更された dismssPop に戻します。

- (void)dismissPop:(NSString *)value buttonThatInvokedPopover:(UIButton*)button {
    NSString *imagefile;
    imagefile = [NSString stringWithFormat:@"%@.png",value];
    [button setImage:[UIImage imageNamed:imagefile] forState:UIControlStateNormal];
    [[currentPopoverSegue popoverController] dismissPopoverAnimated: YES]; 
    // dismiss the popover
}

次のように popOverVC から呼び出します。

[self.delegate dismissPop:value button:buttonThatInvokedMe]

必要ありません... での構築if elseも省略できるはずです。if elseprepareForSegue

コンパイラーの警告を回避するために、ボタン ポインターを渡す型を一貫させる必要があります。Segue が UIButton 型によってのみ呼び出されることが確実な場合は、prepareForSegue シグネチャを変更して送信者を型キャストします。

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(UIButton*)sender

これを行うもう 1 つの方法は、型のままにし、 popOverViewControlleridのポインター型を に変更idしてデリゲート メソッドにid戻すことです。..UIButtonsetImage:forStateUIBUtton

プロトコル

コンパイラの警告なしでこれをすべて機能させるには、dismissPop:デリゲート メソッドのプロトコルを宣言するか、performSelector-type メソッドを使用して間接的に呼び出す必要があります。

于 2013-03-07T03:11:54.907 に答える