2011-02-12 55 views
1

我很抱歉,如果這是一個簡單的問題,但我一直無法找到一個足夠的解決方案,我開車自己有點瘋狂:P基於按下按鈕(iOS)檢索自定義數據?

我有一個應用程序與一些按鈕(40- 50)在不同的視圖上,並且字典應該基於按下哪個按鈕來建立多個條目。

(例如,如果按鈕27按下我的viewController中建立一個快譯通有: 名稱 - >約翰·史密斯 地址 - > 1無限循環 時代 - > 99 )

顯然寫作針對每個按鈕的操作是錯誤的。

我想要做的是繼承UIButton(繼續上面的例子),將Name,Address和Age作爲實例變量添加到我的自定義Button中,並在實例化按鈕時設置每個實例變量使用init: 然後,當按下該按鈕時,我可以擁有由所有按鈕調用的SINGLE buildDict:(id)發件人操作,並且只需使用sender.Name等填充字典即可...

我的問題是:我可以將字段添加到Interface Builder中的屬性檢查器中以設置這些值嗎?如果這是不可能的,我在哪裏可以找到按鈕實例,以便我可以通過編程設置這些值?

回答

6

您不想將屬於該模型的數據放入視圖中。這聽起來非常複雜。
在界面構建器中插入數據?如果我不必爲我的視圖編輯標籤並且想要編輯其中的數據,我感到很幸運?

說真的,說得對。創建一個NSArray。 40個按鈕的40個對象。使用plist編輯器創建地址列表並將plist文件加載到代碼中。這是做到這一點的最快和最乾淨的方式。

給每個按鈕一個標籤。 (如果你不得不添加40個按鈕,我會在代碼中完成)並將它們連接到一個IBAction。我建議你給第一個項目一個1000的標籤。沒有標籤的按鈕就像一個標籤爲0的按鈕,你不想要這個。如果你從按鈕到數組索引,你不想減1。

- (IBAction)buttonPressed:(UIButton *)sender { 
    // remember? tag 1000 equals index 0. 
    NSUInteger index = sender.tag - 1000; 
    NSDictionary *object = [self.data objectAtIndex:index]; 
    // do whatever you want 
} 

無需子類化任何東西。不需要違反模型 - 視圖 - 控制器的概念。

+0

我同意,這是更清潔,我想我是違反MVC。 「給每個按鈕一個標籤。」 這是否已附加到UIButton?我是否必須將其添加到子類中? 「將plist文件加載到您的代碼中」 我從來沒有使用過plist文件。我假設這包含名稱,地址等?我如何在代碼中加載它? 最後,我想給兩個答案給出,我怎樣才能將這些按鈕添加到我在代碼中的各種視圖,而不是使用界面生成器? 感謝幫助,我' – eriknelson 2011-02-12 22:00:22

1

你可能是使用數組和標籤的更好,但如果你真的想在這裏繼承的是你如何能做到這一點:

界面生成器不會讓你添加附加屬性。

您需要使用自定義子類(用實際代碼編寫)來執行此操作。

在Xcode中選擇:

文件 - >新文件 - >目標C類(的UIView子類)。

使用像MyCustomButton這樣的名稱。

然後,您需要替換(在.h中):UIView:UIButton(這是您從UIButton中進行子分類並從UIView完全沒有分類的)。

在接口聲明中,您可以設置新屬性,請記住將它們聲明爲屬性,以便稍後可以訪問它們。

你西港島線最終的東西,看起來像這樣:

@interface MyButton : UIButton { 
    NSString* name; 
    NSString* address; 
    NSNumber* age; 
} 

@property(nonatomic,retain)NSString* name; 
@property(nonatomic,retain)NSString* address; 
@property(nonatomic,retain)NSNumber* age; 

@end 

記住@synthesize你的屬性。

要做到自定義初始化你只寫自己的init方法:

- (id)initWith:(NSString*)aName and:(NSString*)aStreet and:(NSNumber*)anAge{ 
    self = [super init]; 
    self.name = aName; 
    self.address= aStreet; 
    self.age=anAge; 

    return sef; 
} 

祝你好運!