2012-12-15 26 views
0

我想在兩個視圖之間傳遞一個整數。當我從View1返回到MainView時,不會傳遞該值,並且控制檯中不顯示NSLog(@「Changed map」)。我尋找答案,並嘗試了一切,但它不會工作!感覺像代表錯誤的代表...使用UISegmentedControl傳遞視圖之間的值

任何想法?

View1.h

@class FlipsideViewController; 

@protocol FlipsideViewControllerDelegate 
    - (void)flipsideViewControllerDidFinish:(FlipsideViewController *)controller; 
    -(void)flipsideViewControllerSelectionChangedToIndex:(int)index; 
    @end 

@interface FlipsideViewController : UIViewController { 
} 

@property (weak, nonatomic) id <FlipsideViewControllerDelegate> delegate; 
@property (nonatomic, retain) IBOutlet UISegmentedControl *mapType; 

- (IBAction)valueChangedMap:(id)sender; 

@end 

View1.m

-(IBAction)valueChangedMap:(id)sender { 
    [self.delegate flipsideViewControllerSelectionChangedToIndex:[sender selectedSegmentIndex]]; 
    NSLog (@"%d",[sender selectedSegmentIndex]); 

    [self dismissViewControllerAnimated:YES completion:nil]; 
} 

MainView.h

@interface MainViewController : UIViewController <FlipsideViewControllerDelegate, UIPopoverControllerDelegate, MKMapViewDelegate> {} 

@property (weak, nonatomic) IBOutlet MKMapView *mapView; 
@property(weak) id<FlipsideViewControllerDelegate> delegate; 

@end 

MainView.m

-(void)flipsideViewControllerSelectionChangedToIndex:(int)index { 
    NSLog(@"Changed map"); 

    if (index == 0) mapView.mapType = MKMapTypeStandard; 
    if (index == 1) mapView.mapType = MKMapTypeHybrid; 
    if (index == 2) mapView.mapType = MKMapTypeSatellite; 
} 
+0

您確定代表不是零嗎?你在哪裏設置代表?另外,你的'Changed map'方法應該使用一個默認情況下的開關或者一個if/else來確保你不期望的值被捕獲。 – Hunter

回答

0

您只需要view1上的實際委託屬性,並且您的mainView只需要響應該委託協議即可。這是您的代理協議應該是什麼樣子:

@property(nonatomic,unsafe_unretained) id delegate; 

現在,在你的代碼時,MAINVIEW禮物或推你需要線了委託像這樣的廠景(僞代碼):

view1.delegate = self; 

而且一些挑剔的...你永遠不應該有一個viewcontroller解散自己,mainView應該消除view1'完成'委託方法觸發。此外,您應該始終檢查代表在發射前是否響應選擇器:

if([self.delegate respondsToSelector:@selector(yourselectorname)]) { 
    [self.delegate yourselectorname]; 
} 
+0

謝謝。問題是我沒有在mainview中連接代理。 – Christoffer