2014-04-03 118 views
0

這就是我要做的:iOS的顯示圖像點擊

screenshot

在點擊「信息(I)」按鈕,我需要顯示有一個酥料餅左邊的圖像和右邊的一些相關文字。

現在,讓我們在後臺將視圖稱爲「視圖1」,將彈出視圖視爲「視圖2」。

這裏是View2Controller.h的樣子:

@class View2Controller; 
@protocol View2ControllerDelegate <NSObject> 

- (void)infoPopover:(View2Controller *)obic loadImage: (NSString *)imageFilename; 

@end 

@interface View2Controller : UIViewController 
@property (strong, nonatomic) IBOutlet UIImageView *imageInfo; 
@property (strong, nonatomic) IBOutlet UILabel *textInfo; 

@property (nonatomic, assign) id<View2ControllerDelegate> delegate; 

@end 

id <View2ControllerDelegate> _delegate; 

現在View1Controller.h有這樣一行:

@interface View1Controller : UIViewController <View2ControllerDelegate> 

而且View1Controller.m的@implementation頗像這

- (IBAction)showInfo:(id)sender { 
UIButton *btn = (UIButton *)sender; 

View2Controller *obic = [[View2Controller alloc]init]; 
[obic setDelegate:self]; 

switch (btn.tag) { 
    case 1: 
     [self infoPopover:obic loadImage:@"info1.png"]; 
     break; 

    case 2: 
     //Info View 2 
     break; 

    case 3: 
     //Info View 3 
     break; 

    case 4: 
     //Info View 4 
     break; 

    case 5: 
     //Info View 5 
     break; 

    case 6: 
     //Info View 6 
     break; 


    default: 
     break; 
} 
} 

and

- (void)infoPopover:(View2Controller *)obic loadImage:(NSString *)imageFilename 
{ 
    [obic.imageInfo setImage:[UIImage imageNamed:imageFilename]]; 
} 

我查閱了幾個關於代表如何工作的教程。但是我仍然無法在'UIImageView imageinfo'上顯示圖像'info1.png'。任何意見都非常感謝!

+0

你的問題可能是你如何用alloc init創建obic。這很可能會創建View2Controller的新實例,而不是訪問已有的實例。你需要解釋你的2個控制器是如何創建的,以及你的控制器的總體層次結構是什麼(它們是否在導航控制器,分割視圖等中)。 – rdelmar

+0

一旦單擊'i'按鈕,我就會使用'popover'從View1Controller切換到View2Controller。 我剛剛意識到View1Controller(以及一些其他控制器)嵌入在導航控制器中,但View2Controller不是。應該將View2Controller嵌入到導航控制器中嗎? – hrshd

回答

0

解決!

正如之前Paulw11所建議的,代表並不是首先要走的路。所以我拿出了委託代碼。我還拿出了IBAction的showinfo。相反,我所用的方法:

-(BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender 
{ 
    if ([identifier isEqualToString:@"info"]) { 
     UIButton *btn = (UIButton *)sender; 
    [[NSUserDefaults standardUserDefaults]setInteger:btn.tag forKey:@"infoButton"]; 
} 
return YES; 

在View1Controller並在View2Controller我說:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    NSArray *imageArray = @[@"info1.png", @"info2.png", @"info3.png", @"info4.png", @"info5.png", @"info6.png"]; 
    int infoButtonChoice = [[NSUserDefaults standardUserDefaults] integerForKey:@"infoButton"]; 

    [self.imageInfo setImage:[UIImage imageNamed:imageArray[infoButtonChoice -1]]]; 
} 

這使得應用程序的工作正是我想要!

+0

通過NSUserDefaults傳遞你的按鈕編號有點矯枉過正。只需將一個整型屬性添加到View2Controller並將其設置在shouldPerformSegueWithIdentifier中。您還應該將圖像設置移至「viewWillAppear」而不是「viewDidLoad」 – Paulw11

1

如果你有一個連接到你的信息按鈕的流行歌曲,那麼你不需要創建一個View2Controller - segue會爲你做到這一點。

可以擺脫showInfo IBAction爲方法,並添加prepareForSegue:方法 -

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    View2Controller *obic=(View2Controller)segue.destinationViewController; 
    obic.delegate=self; 

    UIButton *btn = (UIButton *)sender; 


    NSString *imageFilename=nil; 

    switch (btn.tag) { 
    case 1: 
     imageFil[email protected]"info1.png"; 
     break; 

    case 2: 
     //Info View 2 
     break; 

    case 3: 
     //Info View 3 
     break; 

    case 4: 
     //Info View 4 
     break; 

    case 5: 
     //Info View 5 
     break; 

    case 6: 
     //Info View 6 
     break; 


    default: 
     break; 
    } 

    if (image!=nil) 
    { 
     [obic.imageInfo setImage:[UIImage imageNamed:imageFilename]]; 
    } 
    else 
    { 
     NSLog(@"Unknown button tag triggered segue - %d",btn.tag); 
    } 
} 

也沒什麼,你在這裏顯示需要View1Controller充當View2Controller代表,所以也許你誤解是什麼代表團用於。假設View2Controller中有一個按鈕,當它被按下時你想通知View1Controller - 在View2Controller中,你可以調用[self.delegate theButtonWasPressed];,這將在任何代理中調用該方法(可以是實現View2ControllerDelegate協議的View1Controller實例)

+0

感謝您的解釋@ Paulw11,但您建議的代碼無效。按照您的指示,我刪除了「委託」代碼並註釋掉了IBAction showinfo。我也刪除了'info'按鈕和View2Controller(我最初創建的)之間的連接。我按照你對segue的評論爲我創建了一個ViewController。在運行代碼時,按下'info'按鈕不會執行任何操作。 – hrshd

+0

不,你需要信息按鈕和故事板中的View2Controller場景之間的連接 - 這是當你觸摸按鈕時觸發的繼續 – Paulw11