Как изменить метку UIButtons, цвет метки и т. Д. С другого контроллера представления? - PullRequest
0 голосов
/ 13 октября 2011

В контроллере одного вида (основного вида) у меня есть кнопка UIB, которая создает новую кнопку UIB.Когда вы делаете долгое нажатие на новую кнопку UIB, новый контроллер представления (второе представление) представляется presentmodalviewcontroller.Во втором представлении у меня есть UITableView, а в первом UITableViewCell есть UITextField.Я хочу, чтобы, когда вы что-то вводили в UITextField, новый заголовок 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 файл, который я сослался на первый контроллер вида следующим образом:

@class iAppViewController;

@interface ButtonSettings : UIViewController < UIPickerViewDataSource, UIPickerViewDelegate > {

// iAppViewController
iAppViewController *iAppView;

в файле .m я импортировал первый контроллер вида

#import "iAppViewController.h"

И это код Iиспользуйте для вызова действия:

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

И это действие в первом контроллере представления:

- (void)ApplyAllObjectsSettings:(id)sender {

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

}

1 Ответ

1 голос
/ 13 октября 2011

Ваш код не работает, потому что вы никогда не передаете новый текст кнопке.Когда вы говорите, что

 AppDelegate.ButtonText = [TextFieldText text];

установлен, для ButtonText (который, я думаю, является строкой NSString) в текущий текст UITextFields, который, скорее всего, пуст.Если вы посмотрите документы или другие примеры, вы увидите, что селектор для UIControlEventEditingChanged фактически принимает один аргумент.Это отправитель, поэтому в вашем случае UITextField, который инициирует событие.Используя его, вы можете получить доступ к введенному тексту, и вам даже не понадобится ваша переменная * 1007. *.

. Поэтому измените строку, в которой вы устанавливаете цель 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;

И не забудьте @synthesize iAppView; в вашем файле ButtonSettings.m.Теперь, когда вы создаете экземпляр ButtonSettings в своем первом представлении, вы можете просто передать ссылку следующим образом:

myButtonSettingsInstance.iAppView = self;
...