Использование кнопок Tag для назначения переменной в Какао - PullRequest
0 голосов
/ 18 мая 2011

Можно ли использовать тег кнопки для установки переменной?

Вот что я имею в виду:

Нажатие кнопки возвращает ее тег, который также будет переменной.

Затем откройте NSPanel, дайте пользователю выбрать файл и нажмите ОК, чтобы сохранить путь выбранного файла в строку.

Затем установите строку пути в соответствующую переменную ...

Я думаю Я правильно спрашиваю.Я только начинаю, поэтому, пожалуйста, не голосуйте против меня, просто попросите разъяснений, и я предоставлю их.

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

Дополнения:

Вот что я пытаюсь сделать.

Допустим, я сделал небольшой массив:

NSMutableArray *myArray = [NSMutableArray array];
[myArray addObject:@"blank"];
[myArray addObject:@"blank"];
[myArray addObject:@"blank"];

У меня есть 3 кнопки, каждая с тегами 0, 1 и 2 соответственно.

У меня также естьфункция, скажем setPath.

То, что я хотел бы сделать setPath, это использовать тег кнопки, поэтому, если я нажму кнопку buttonOne, чей тег равен 0, он установит объект с индексом 0 с путем, которыйхранится с использованием NSOpenPanel, но если я нажму на buttonTwo, чей тег равен 1, он установит объект с индексом 1, используя путь, который получает NSOpenPanel.

Я думаю, что это лучшее описание ...

Ответы [ 4 ]

1 голос
/ 18 мая 2011

Я не уверен, что это то, что вам нужно, но вы можете взять значение из поля тега и присвоить его переменной, например:

int a = myButton.tag;

Поле тега - это просто int, являющееся частью класса UIButton.

0 голосов
/ 18 мая 2011

Поскольку теги являются значениями типа int, вы можете отобразить теги на объекты NSString с помощью NSDictionary:

<code>self.pathsForTags = [[NSDictionary alloc] initWithObjectsAndKeys:
    @"/path/one", [NSNumber numberWithInt:1],
    @"/path/two", [NSNumber numberWithInt:2],
    @"/path/three", [NSNumber numberWithInt:3],
    nil];

<code>- (IBAction)buttonClicked:(UIButton *)sender
{
    NSNumber *key = [NSNumber numberWithInt:sender.tag];
    NSString *path = [self.pathsForTags objectForKey:key];
    // Use path here
}

Было бы еще проще использовать индексы NSArray (как предложил Grady Player), а не NSDictionary, но вы имели бы меньший контроль над возможными значениями тегов (они должны быть последовательными, начиная с 0).

0 голосов
/ 18 мая 2011

У вас есть несколько вариантов, и я делаю это время от времени, это единственный способ сделать это, если у вас огромное количество ответчиков NSR, отправляющих одно и то же действие.

-(IBAction)someAction:(NSButton *)sender
{
    switch(sender.tag)
    { 
    //one possibility
    case 0:
    //do something
        break;
    }
    //another possibility
    id objectOfInterest = [someArray objectAtIndex:sender.tag];
}
0 голосов
/ 18 мая 2011

Тег представления - это NSInteger.Из вашего описания звучит так, будто вы либо верите, что тег может быть NSString, либо хотите установить tag кнопки в качестве указателя на NSString, который вы вытащите из sender 'Тег s в методе действия кнопки.

Я подозреваю, что вы просто не понимаете, что может содержать представление tag, но если вы рассматриваете возможность установки значения тега для указателя на объект, я советуюЭто.Это анти-паттерн и хрупкий для загрузки.

Вам гораздо лучше переосмыслить то, что вы пытаетесь сделать.Является ли значение, которое вы получаете от NSOpenPanel или NSSavePanel, чем-то, что вы хотите сохранить, пока существует ваш объект?Или это то, что вам нужно просто достаточно долго, чтобы обработать значение?

Если вам просто нужен путь, скажем, для чтения содержимого файла, локальная переменная вполне подходит.Если вам нужно неопределенное значение, используйте свойство .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...