2011-01-26 4 views
0

Этот вопрос чрезвычайно прост, и я прошу прощения, если ответ должен смотреть мне в лицо.Objective-C (iOS) Доступ к тексту UITextField из другого класса

Итак: у меня есть UITableView и другой viewController. Я обновляю некоторую информацию для CoreData в файле .m-файла UITableView. Для этого мне нужен текст в текстовом поле в другом viewController.

Так быть достаточно неопытный, я попробовал:

[entity setName:[NSString stringWithFormat:@"%@", viewController.entityNameInputField.text]];

Я переименованы несколько вещей для ясности. Entity - это моя сущность (без шуток), атрибут, который я устанавливаю, называется Name, viewController - это где textField и текстовое поле называется entityNameInputField.

Меня больше интересует, почему такого рода вещи не работают, чем может быть решением моей проблемы. Почему я не могу просто получить текст из текстового поля таким образом?

Я полагаю, словом все иначе:

Если я в классе А, и я хочу, чтобы получить доступ к значению, скажем, в NSString в классе B, почему я не могу просто использовать ClassA.TheString или [ ClassA TheString] .... из того, что мне удалось понять, я отправляю эти методы метода getter, и я не могу понять, почему это не работает ...

Любая помощь будет оценена по достоинству :)

ответ

0

Некоторый код был бы полезен, чтобы увидеть, что может вызвать ваше замешательство, но если вы указали свойства в своих классах связанные переменные экземпляра (или ha ve вручную объявленные аксессоры), то вы сможете получить доступ к связанным ivars.

Итак, что-то вроде этого (ниже) будет работать нормально.

MyClassA * instanceOfA = [[myClassA alloc] init]; 
MyClassB * instanceOfB = [[myClassB alloc] init]; 

instanceOfA.myProperty = instanceOfB.myProperty; 
+0

Aha ... это начало иметь больше смысла. Но если я создам экземпляр класса B в классе A, то не будет ли значение моего текстового поля равным нулю? – D2B

+0

Это будет зависеть от того, как был инициализирован instanceOfA. У вас есть контроль над этим. – xyzzycoder

+0

Gotcha, спасибо большое! – D2B

0

Насколько я понимаю, это не проблема доступа к значениям из другого класса. Предполагая, что оба контроллера просмотра сохраняются в памяти, вы всегда можете называть получатели/сеттеры друг друга.

Я предполагаю, что у вас есть UITableViewController имени А, а затем вы представить пользовательскую UIViewController имени B с текстовым полем. Пользователь отбирает что-то в текстовом поле, и вы хотите, чтобы этот текст возвращался к контроллеру табличного представления. Если внутри B есть действительная ссылка на A, вы можете вызвать его setter для соответствующей переменной, а затем отклонить пользовательский контроллер.

Например, в заголовке Б вы могли бы:

@interface MyViewController : UIViewController { 
    id tableViewController; 
} 
@property (nonatomic, retain) id tableViewController; 

затем в А, когда вы создаете B:

MyViewController *B = [[MyViewController alloc] init]; 
B.tableViewController = self; // this passes a reference to A 

поэтому, когда вы находитесь в B, и пользователь вошел ввод в текстовом поле, вы могли бы сделать что-то вроде

[self.tableViewController setVarname:textField.text]; 

предполагающего есть переменная VarName в A, и textFie ld в B.

Вы также можете получить доступ к без необходимости создавать отдельную переменную, позвонив по телефону

[self parentViewController] 

, если это подходит вам лучше.

+0

Я использую UIViewController в качестве модального контроллера. Таким образом, он соскальзывает, а затем пользователь должен ввести свои предпочтительные данные в textField. Я вижу, что вы получаете там, и я сейчас пытаюсь это сделать. – D2B

Смежные вопросы