2013-03-07 56 views
-1

在RootViewController中我有一個按鈕* flop1,點擊後通過segue * segPop打開PopViewController,當選擇了選擇並且彈出窗口關閉時,按鈕* flop1的s圖像被改變。iOS:如何使用相同的Popover ViewController來控制兩個單獨的按鈕

我想擁有多個按鈕,如* flop1,每個按鈕都可以使用相同的PopViewController自己選擇的圖像進行填充。

我通過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 

如何創建在我

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

填充* flop2按鈕的IF ELSE語句以嶄新的形象,同時保持* flop1圖像更改呢?

對不起,如果這一切似乎凌亂,我有零編程教育,並試圖從模仿所有這一切。

由於

回答

1

在該方法中:

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

sender是一個指針到調用SEGUE對象(在你的情況下,按鈕)。在prepareForSegue

@property (strong, nonatomic) UIButton* buttonThatInvokedMe; 

它設置爲調用按鈕:您可以在popoverViewController定義屬性

[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 else施工prepareForSegue

你會想讓你的按鈕指針傳遞類型一致,以避免編譯器警告。如果你確信,Segue公司只能由UIButton的類型來調用,改變你的prepareForSegue簽名類型轉換髮件人:

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

的另一種方式做,這是把它作爲id類型,但改變你的指針類型在popOverViewController中調用id並將其傳回給委託方法,作爲id - 但是在調用setImage:forState方法之前,您需要將其類型化爲UIButton,因爲這需要UIBUtton類型。

協議

爲了使這個沒有編譯器警告,你還需要聲明一個協議,爲dismissPop:委託方法或使用performSelector型的方法來間接地調用它的所有工作。

+0

「您可以使用此指針在您的popoverViewController中設置屬性」此屬性的外觀如何?並在這個修改 - (void)dismissPop做「按鈕」代表一個通用的指針說「按鈕」,調用segue?當我做了更改,我得到{Expected Method body}和{使用未聲明的標識符'按鈕'}的兩個錯誤(第二個是關於[button setImage:[UIImage imageNamed ....] – Chameleon 2013-03-07 19:20:48

+0

@Chameleon - 查看我的更新。同時檢查委託方法的簽名,我至少有一個錯字。 – foundry 2013-03-07 21:15:43

相關問題