2012-01-28 4 views
0

Я только что начал изучать Objective-C/Cocoa Touch. Я работаю над приложением, которое позволяет создавать представления «на лету» (ради этого вопроса можно просто предположить, что нажатие на какую-либо кнопку приводит к добавлению кнопки и метки в текущий вид)Динамические розетки в объективе-C

Так что, когда пользователь нажимает на эту кнопку «Создать кнопку», а новая кнопка добавляется к текущему виду. Когда пользователь нажимает на вновь созданную кнопку, я хочу, чтобы текст на вновь созданной метке менялся. Теперь я знаю, что я могу назначить IBAction кнопке, когда создаю ее во время выполнения, но я не уверен, как связать новый ярлык с Outlet.

Кроме того, я хочу сделать это с минимальным кодом, но я не вижу, как это будет возможно. AFAIK единственным способом я могу реально определить элементы управления с точкой зрения является их свойством тега, который не является полностью полезным, поэтому я обработчик событий, который заканчивается выглядеть так (псевдокод):

switch(tag) 
{ 
    case 1: 
    //label1.text = @"foo"; 
    break; 

    case 2: 
    //label2.text = @"foo"; 
    break; 
    //etc 
} 

В C# Я мог бы сделать что-то вроде этого (предполагая, что е имеет CommandEventArgs, все кнопки подключены к этому событию, и Имя_команда содержит идентификатор метки, мы хотим обновить):

Label lbl = (Label)panel1.FindControl(e.CommandName); 
    lbl.Text = "foo"; 

Так что мои вопросы

  • Можно ли назначить/создать выходные точки во время выполнения и связать их с заданной меткой
  • Есть ли лучший способ выяснить, какая метка должна действовать, кроме использования переключателя?

Спасибо!

ответ

4

Назначение IBOutlets, как правило, позволяет вам связать вещи, созданные в Interface Builder, с переменными экземпляра в вашем коде. Поскольку вы создаете представления в коде для начала, похоже, что вы должны просто хранить ссылки на них в переменных экземпляра и не беспокоиться об IBOutlets.

+0

Спасибо Адаму. Это довольно прямолинейно. – dparsons

0

Если у вас есть:

UILabel *localVariableForLabel = ...some label just created... 

И вы хотите, чтобы хранить его в розетку «instanceVariableForLabel» вы можете использовать кодирование ключ-значение. Таким образом:

[targetObject setValue:localVariableForLabel forKey:@"instanceVariableForLabel"]; 

Или передать любой другой NSString. Это именно то, что делает Cocoa при загрузке NIB, и поэтому ваши точки должны быть совместимы с ключевыми значениями.

Я не совсем понимаю, что вы имеете в виду, создавая новую розетку, но если вы хотите, чтобы у вас была возможность разместить этикетку и получить ее позже по названию, возможно, вы ищете NSDictionary.

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