2013-03-19 80 views
0

我在UIViewController中有一個表,我也有一個UIView的子視圖。 我試圖從我的UIViewController數據傳遞到了UIView:從UIViewController傳遞數據到UIView

MainViewController:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UAModalPanel *mainSubModalPanel = [[[MainSubView alloc] initWithFrame:self.view.bounds] autorelease]; 
    [self.view addSubview:mainSubModalPanel]; 
    [mainSubModalPanel showFromPoint:CGPointMake(384.5, 512.5)]; 

} 

MainSubView.h

@interface MainSubView : UAModalPanel 
{ 
    NSString *dishName; 
} 
@property (strong, nonatomic) IBOutlet UILabel *mainTitle; 
@property (nonatomic, retain) NSString *dishName; 

不過後來我有麻煩,從我的表視圖將數據傳遞「dishName」在子視圖中,並設置「mainTitle」=「dishName」 任何人都可以幫助我?

謝謝!

回答

0

首先,你存儲你的新分配MainSubView在一個UAModalPanel指針,儘管您需要訪問的屬性是MainSubView子類的一部分。嘗試改變MainSubView初始化:

MainSubView *mainSubModalPanel = [[[MainSubView alloc] initWithFrame:self.view.bounds] autorelease]; 

現在,你應該能夠設置dishNamemainTitletext

mainSubModalPanel.dishName = @"Pizza!"; 
    mainSubModalPanel.mainTitle.text = @"Moar Pizza!"; 

然後將其添加爲一個子視圖和你有任何其他上述(我喜歡在傳遞所有權之前完全設置對象,因爲它傾向於導致更少的毛刺)


小注:

NSString *dishName財產可能會更好,有copy修改,而不是retain。具有可變子類型(即NSString具有NSMutableString子類)的基礎類型可能會被傳遞一個可從外部更改的可變子類。一般來說,這不是你想要的東西,導致錯誤(當然,除非你要求一個明確的NSMutableString),並使用copy可以確保無論你通過保持這樣:

@property (nonatomic, copy) NSString *dishName; 

另外,如果你在具有MainSubView的mainTitle.text比賽dishName計劃,你可能要考慮自動指定爲dishName定製的setter方法是設置mainTitle.text這樣的:

- (void)setDishName:(NSString *)newDishName 
{ 
    BOOL notTheSameStringInstance = (newDishName != dishName); 
    BOOL notIdenticalStringContents = ![newDishName isEqualToString:dishName]; 
    if (notTheSameStringInstance && notIdenticalStringContents) { 
     [dishName release]; 
     dishName = [newDishName copy]; 

     mainTitle.text = dishName; 
    } 
} 
+0

它的工作原理!謝謝你的幫助! – 2013-03-20 00:39:06

+0

好。很高興能夠提供幫助。 – 2013-03-20 00:48:22

0

將init方法調整爲傳遞數據的init方法。

MainSubView *mainSV = [[MainSubView alloc] initWithMyCustomData:(NSDictionary *)dictionaryObject andAnArray:(NSArray *)array andAString:(NSString *)string andANumber:(NSNumber *)aNumber; 
0

它看起來像你已經分類UIView並稱之爲MainSubView。現在,添加一些屬性到你的子類並從視圖控制器中設置它們。

一定要在UIViewController的.h文件中包含自定義UIView的.h文件。

mainSubModalPanel.myProperty = myString; 

然後,因爲你在代碼中創建自定義的UIView,不要忘記將其添加爲的UIViewController的一個子視圖:

相關問題