2011-10-12 67 views
0

在一個視圖(主視圖)控制器我有一個UIButton創建一個新的UIButton。當你長時間按下新的UIButton時,一個新的視圖控制器(第二視圖)由當前的視圖控制器呈現。在第二個視圖中,我有一個UITableView,在第一個UITableViewCell中有一個UITextField。我想要的是,當您在UITextField中輸入某些內容時,新的UIButtons標題會更改爲該標題。如何從另一個視圖控制器更改UIButtons標籤,標籤顏色等?

我所做的是在我的應用程序委託中創建NSString。在

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

第二種觀點我已經使用這個代碼:

// Passing the TextFieldText to NewButton. 
     iAppAppDelegate *AppDelegate = (iAppAppDelegate *)[[UIApplication sharedApplication] delegate]; 
     AppDelegate.ButtonText = [TextFieldText text]; 

     iAppView = [[iAppViewController alloc] initWithNibName:@"iAppViewController" bundle:nil]; 

     [TextFieldText addTarget:iAppView action:@selector(ApplyAllObjectsSettings) forControlEvents:UIControlEventEditingChanged]; 

在我用這個動作來改變新UIButtons標題的主要觀點:但是

- (void)ApplyAllObjectsSettings { 

iAppAppDelegate *AppDelegate = (iAppAppDelegate *)[[UIApplication sharedApplication] delegate]; 

[NewButton setTitle:AppDelegate.ButtonText forState:UIControlStateNormal]; } 

它確實不行。如何使這項工作或另一種方式來做到這一點任何想法,真的會感激:)提前:)

感謝

更新:

在我的第二個觀點.h文件中我已經提到像這樣在第一視圖控制器:在.m文件

@class iAppViewController; 

@interface ButtonSettings : UIViewController < UIPickerViewDataSource, UIPickerViewDelegate > { 

// iAppViewController 
iAppViewController *iAppView; 

我已導入所述第一視圖控制器

#import "iAppViewController.h" 

這是我用來調用操作的代碼:

  [TextFieldText addTarget:iAppView action:@selector(ApplyAllObjectsSettings:) forControlEvents:UIControlEventEditingChanged]; 

而且這是在第一個視圖控制器的操作:

- (void)ApplyAllObjectsSettings:(id)sender { 

[NewButton setTitle:((UITextField *)sender).text forState:UIControlStateNormal]; 

}

+0

我知道,我們已經到過那裏:你的問題無關和Xcode。我想你需要學習IDE和編程語言的區別。 – Phlibbo

+0

我的不好。任何想法如何解決它? :) –

+0

是的:)另外,看看我的答案你的其他問題請。 – Phlibbo

回答

1

您的代碼不工作因爲你從來沒有真正將新文本傳遞給按鈕。當你說

AppDelegate.ButtonText = [TextFieldText text]; 

設置是在ButtonText(我猜是一個NSString)到UITextFields目前的案文,這是最有可能是空的。如果您查看文檔或其他示例,您會看到UIControlEventEditingChanged的選擇器實際上接受一個參數。這是發件人,所以在你的情況下,發起事件的UITextField。使用它,你可以訪問輸入的文本,你甚至不需要你的變量ButtonText

那麼改變行你設置UITextViews目標是:(注意新的 ':')

[TextFieldText addTarget:iAppView action:@selector(ApplyAllObjectsSettings:) forControlEvents:UIControlEventEditingChanged]; 

那麼你的聽衆改變這種

- (void)ApplyAllObjectsSettings:(id)sender { 
    [NewButton setTitle:((UITextField *)sender).text forState:UIControlStateNormal]; 
} 

更新:

正如我所說,你的第二個視圖中的iAppView需要指向第一個視圖。歸檔的一個方法是通過使這樣的屬性(在你的ButtonSettings.h):

@interface ButtonSettings : UIViewController < UIPickerViewDataSource, UIPickerViewDelegate > { 
    ... 
    iAppViewController *iAppView; 
} 
@property (nonatomic, strong) iAppViewController * iAppView; 

而且不要忘了在ButtonSettings.m文件@synthesize iAppView;。現在,當你在你的第一個視圖中創建的ButtonSettings實例,你可以通過這樣的參考:

myButtonSettingsInstance.iAppView = self; 
+0

抱歉,但它不起作用....行動執行,但沒有任何反應....但什麼罷工是:如何(((UITextField *)發件人).text引用我的第二個視圖中的TextFieldText變量? –

+0

因爲正如我所說的,這個變量是在'發件人'參數中傳遞的。你嘗試過調試器嗎? ApplyAllObjectsSettings是否被調用?稍等片刻:您說當文本框位於2.視圖中時,按鈕處於第一個視圖中?那麼爲什麼你在tableview中爲'iAppView'創建一個新的ViewController?這不應該指出第一個已經存在的觀點嗎? – Phlibbo

+0

調用ApplyAllObjectsSettings。是的它應該但除非我使用代碼iAppView = [[iAppViewController alloc] initWithNibName:@「iAppViewController」bundle:nil]; ApplyAllObjectsSettings不叫 –

相關問題