Как получить входные данные от сегментированного элемента управления - PullRequest
4 голосов
/ 31 мая 2011

Я пытаюсь получить выбор пользователя из сегментированного элемента управления, а затем сохранить его в NSUserDefaults, т. Е. Если выбран первый сегмент, то он сохраняет int "1" в NSUserDefaults, но если выбран второй сегмент, то онсохраняет int "2" в NSUserDefaults.

Ответы [ 4 ]

8 голосов
/ 04 августа 2012
- (IBAction)totalAction:(id)sender {
    toggleNav = sender; // this is your segmented control 
    if ([toggleNav selectedSegmentIndex] == 0) {
        NSlog(@"i am here");
    } else if ([toggleNav selectedSegmentIndex] == 1) {
        NSlog(@"i am here");
    }
}
3 голосов
/ 31 мая 2011

Самый простой способ - использовать привязку. Привязать выбранный индекс элемента управления к общедоступному пользовательскому контроллеру по умолчанию и установить путь к ключу модели для ключа предпочтения, который вы хотите использовать.

Изменить, чтобы добавить : Я вижу, что вы не указали Mac или iOS. Если это Mac, привязка, безусловно, самый простой способ, тогда как привязка недоступна в iOS.

Тот факт, что сегментированные контрольные значения начинаются с 0, не имеет значения. Вы можете связать выбранный тег, а не выбранный индекс, а затем использовать любые значения тегов, которые вы хотите.

1 голос
/ 25 октября 2012

если вы работаете с iOS, вы можете добавить следующее к segmentedcontrol

           [yourSegmentedControl addTarget:self action:@selector(valueChanged:) forControlEvents: UIControlEventValueChanged];

, где в вашем методе valueChanged вы обновляете UserDefaults.Обратите внимание на двоеточие после valueChanged.Вам это не нужно, если valueChanged не имеет параметра.

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

Не слушай парня сверху. Первое, что вы должны знать, это то, что UISegmentedControl начинается с 0. Итак, первый столбец - 0, второй - 1, третий - 2 и т. Д. Если вы хотите начать с нуля, просто добавьте один к целому числу, как только вы получите значение. (Смотри ниже) Чтобы получить его значение при его изменении, подключите метод IBAction и подключите его к вашему UISegmentedControl. Сделайте так, чтобы действие происходило с valueChanged, а не с touchUpInside. Затем в вашем методе IBAction, скажем, он называется «theMethod», используйте этот код.

-(IBAction)theMethod {
int theInteger;
theInteger = [segmentedController selectedSegmentIndex];//segmentedController is the name of your UISegmentedController.
//theInteger ++; //adds 1 to the integer so as to start the numbering at 1 instead of 0 like I have explained up above.

Затем вы можете сохранить целое число с помощью NSUserDefaults.

Обратите внимание, что вам нужно будет преобразовать ваше целое число в NSNumber, если вы хотите сохранить его, потому что вы не можете сохранять целые числа или переменные, вы можете только сохранять объекты. Для этого я бы использовал следующее:

NSNumber *myNumber = [NSNumber numberWithInt:theInteger];
...