Несколько элементов UISwitch в одном UIView

Возможный дубликат:
Обработка нескольких элементов управления UISwitch в виде таблицы без использования свойства тега

Ну, я хочу спросить, как я могу настроить 7 UISwitches на один UIview? Я размещаю коммутаторы с помощью конструктора интерфейсов, а затем хочу управлять ими с помощью кода. Каков наилучший способ управления этим. Вот мой .h на данный момент

#import <UIKit/UIKit.h>

@interface searchEditViewController : UIViewController{

    UISwitch *switchOne;
    UISwitch *switchTwo;
    UISwitch *switchFor;
    UISwitch *switchFive;
    UISwitch *switchSix;
    UISwitch *switchSeven;


}

@property(nonatomic,retain)UISwitch *switchOne;
@property(nonatomic,retain)UISwitch *switchTwo;
@property(nonatomic,retain)UISwitch *switchThree;
@property(nonatomic,retain)UISwitch *switchFour;
@property(nonatomic,retain)UISwitch *switchFive;
@property(nonatomic,retain)UISwitch *switchSix;
@property(nonatomic,retain)UISwitch *switchSeven;
-(IBAction)toggleButtonPressed:(id)sender;
@end

Я хочу сделать один метод действия toggleButtonPressed, который позаботится о семи из них.


person Mpampinos Holmens    schedule 01.12.2011    source источник


Ответы (2)


Создайте одно действие для всех UISwitch объектов (наверное, это toggleButtonPressed). В этом методе теперь вы можете узнать, какой UISwitch был запущен:

-(IBAction)toggleButtonPressed:(id)sender{
    UISwitch *switchObj = (UISwitch*)sender;
    if (switchObj == self.switchOne){
        // do stuff
    }

    if (switchObj == self.switchTwo){
        // do stuff
    }

//    switch(switchObj.tag){
//        case 1:
//            // do stuff
//            break;
//        case 2:
//            // do stuff
//            break;
//    }
}

Редактировать. Вы можете установить свойство tag на некоторое значение (от 1 до 7) и изменить if-statement на switch-case.

person beryllium    schedule 01.12.2011
comment
как это сделать с помощью переключателя? как я могу получить значение тега, приведенный выше код не работает. Я разместил значения тегов от одного до семи через конструктор интерфейса! - person Mpampinos Holmens; 01.12.2011
comment
@MpampinosHolmens, я обновил ответ. раскомментируйте блок переключателя, если вы хотите его использовать - person beryllium; 01.12.2011
comment
спасибо за код, но я получаю эту ошибку [searchEditViewController toggleButtonPressed]: нераспознанный селектор отправлен экземпляру 0xc291030 sharedlibrary apply-load-rules all Текущий язык: авто; в настоящее время цель-c - person Mpampinos Holmens; 01.12.2011
comment
ОК, исправлено, извините за задержку, просто дерьмо конструктора интерфейсов - person Mpampinos Holmens; 01.12.2011

@beryllium, ваш способ работает, но вы можете попробовать что-то более элегантное.

Вместо этого пометьте каждый переключатель, а затем вместо if-then используйте switch-case, как вы, кажется, закомментировали.

Вот пример, обратите внимание, что kUIActivityIndicatorViewStyleWhiteLarge на самом деле является константой, которую я создал и которой присвоено значение #define kUIActivityIndicatorViewStyleWhiteLarge 1

- (IBAction)setSpinnerType:(UISwitch *)sender
{
    // switch based on tag value
    // turn other two switches off
    switch (sender.tag) {
        case kUIActivityIndicatorViewStyleWhiteLarge:
            self.spinner.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhiteLarge;
            [sender setOn:YES animated:YES];
            [self.whiteSwitch setOn:NO animated:YES];
            [self.graySwitch setOn:NO animated:YES];
            break;
        case kUIActivityIndicatorViewStyleWhite:
            self.spinner.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhite;
            [self.whiteLargeSwitch setOn:NO animated:YES];
            [sender setOn:YES animated:YES];
            [self.graySwitch setOn:NO animated:YES];
            break;
        case kUIActivityIndicatorViewStyleGray:
            self.spinner.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray;
            [self.whiteLargeSwitch setOn:NO animated:YES];
            [self.whiteSwitch setOn:NO animated:YES];
            [sender setOn:YES animated:YES];
            break;
        default:
            break;
    }
}

Если вы хотите сделать это по-своему, это нормально, но опять же менее оптимально. Однако, если вы это сделаете, код:

UISwitch *switchObj = (UISwitch*)sender;
    if (switchObj == self.switchOne){

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

-(IBAction)toggleButtonPressed:(UISwitch *)sender{
    // UISwitch *switchObj = (UISwitch*)sender;
    if (sender == self.switchOne){
        // do stuff
    }

Надеюсь, это поможет.

Я создал приложение для тестирования стилей UIActivityIndicatorView на фоне разных цветов, и оно использует ползунки и переключатели. Вот адрес, если кто-то хочет увидеть приложение с компонентами IB:

https://github.com/asadquraishi/UIActivityIndicatorView-Test

person aquraishi    schedule 25.08.2012
comment
спасибо большое чувак это было здорово! - person Mpampinos Holmens; 30.08.2012