Подтвердить что ты не робот

Как установить значение по умолчанию для UIPickerView

У меня проблема с моим UIPickerView. У меня есть 3 значения в нем AP AP и NA. Когда я запускаю приложение, похоже, что EU выбрано, но когда я делаю NSLog(@"%@", [regions objectAtIndex:row]);, я возвращаюсь обратно (null), теперь, когда я касаюсь UIPickerView, выбирается значение ЕС, и я получаю "EU" обратно из NSLog.

Мой вопрос:

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

Изменить: Вот мой код для получения выбранного элемента:

#pragma mark -
#pragma mark PickerView DataSource

- (NSInteger)numberOfComponentsInPickerView:
(UIPickerView *)pickerView
{
    return 1;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView
numberOfRowsInComponent:(NSInteger)component
{
    return [regions count];
}
- (NSString *)pickerView:(UIPickerView *)pickerView
             titleForRow:(NSInteger)row
            forComponent:(NSInteger)component
{
    return [regions objectAtIndex:row];
}

#pragma mark -
#pragma mark PickerView Delegate
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row
      inComponent:(NSInteger)component
{

                selectedRegion = [[NSString alloc] initWithFormat:
                              @"%@", [regions objectAtIndex:row]];
    NSLog(@"%@", selectedRegion);


}
4b9b3361

Ответ 1

TL: версия DR:

//Objective-C
[self.picker selectRow:2 inComponent:0 animated:YES];
//Swift
picker.selectRow(2, inComponent:0, animated:true)

Либо вы не задали свой выборщик, чтобы выбрать строку (которую вы, кажется, сделали, но все равно):

- (void)selectRow:(NSInteger)row inComponent:(NSInteger)component animated:(BOOL)animated

ИЛИ вы не использовали следующий метод для получения выбранного элемента из своего сборщика

- (NSInteger)selectedRowInComponent:(NSInteger)component

Это выведет выбранную строку как целое из вашего сборщика и сделает, как вам будет угодно. Это должно сделать трюк для yah. Удачи.

В любом случае прочитайте ссылку: https://developer.apple.com/documentation/uikit/uipickerview


EDIT:

Пример настройки вручную и получения выбранной строки в UIPickerView:

.h файл:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UIPickerViewDelegate, UIPickerViewDataSource>
{
    UIPickerView *picker;
    NSMutableArray *source;
}

@property (nonatomic,retain) UIPickerView *picker;
@property (nonatomic,retain) NSMutableArray *source;

-(void)pressed;

@end

.m файл:

#import "ViewController.h"

@interface ViewController ()

@end
@implementation ViewController

@synthesize picker;
@synthesize source;

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return YES;
}

- (void) viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    self.view.backgroundColor = [UIColor yellowColor];

    self.source = [[NSMutableArray alloc] initWithObjects:@"EU", @"USA", @"ASIA", nil];

    UIButton *pressme = [[UIButton alloc] initWithFrame:CGRectMake(20, 20, 280, 80)];
    [pressme setTitle:@"Press me!!!" forState:UIControlStateNormal];
    pressme.backgroundColor = [UIColor lightGrayColor];
    [pressme addTarget:self action:@selector(pressed) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:pressme];

    self.picker = [[UIPickerView alloc] initWithFrame:CGRectMake(20, 110, 280, 300)];
    self.picker.delegate = self;
    self.picker.dataSource = self;
    [self.view addSubview:self.picker];

    //This is how you manually SET(!!) a selection!
    [self.picker selectRow:2 inComponent:0 animated:YES];
}

//logs the current selection of the picker manually
-(void)pressed
{
    //This is how you manually GET(!!) a selection
    int row = [self.picker selectedRowInComponent:0];

    NSLog(@"%@", [source objectAtIndex:row]);
}

- (NSInteger)numberOfComponentsInPickerView:
(UIPickerView *)pickerView
{
    return 1;
}

- (NSInteger)pickerView:(UIPickerView *)pickerView
numberOfRowsInComponent:(NSInteger)component
{
    return [source count];
}

- (NSString *)pickerView:(UIPickerView *)pickerView
             titleForRow:(NSInteger)row
            forComponent:(NSInteger)component
{
    return [source objectAtIndex:row];
}

#pragma mark -
#pragma mark PickerView Delegate
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row
      inComponent:(NSInteger)component
{
//    NSLog(@"%@", [source objectAtIndex:row]);
}

@end

EDIT для решения Swift (источник: ответ Дэна Болье)

Определить выход:

@IBOutlet weak var pickerView: UIPickerView!  // for example

Затем, например, в вашем представленииWillAppear или вашем viewDidLoad вы можете использовать следующее:

pickerView.selectRow(rowMin, inComponent: 0, animated: true)
pickerView.selectRow(rowSec, inComponent: 1, animated: true)

Если вы проверите структуру Swift 2.0, вы увидите .selectRow, как:

func selectRow(row: Int, inComponent component: Int, animated: Bool) 

вариант.selectRow в Xcode отображает следующее:

Ответ 2

Вот как установить значение по умолчанию для UIPickerView

[self.picker selectRow:4 inComponent:0 animated:YES];

Ответ 3

Быстрое решение:

Определить выход:

@IBOutlet weak var pickerView: UIPickerView!  // for example

Затем, например, в вашем представленииWillAppear или вашем viewDidLoad вы можете использовать следующее:

pickerView.selectRow(rowMin, inComponent: 0, animated: true)
pickerView.selectRow(rowSec, inComponent: 1, animated: true)

Если вы проверите структуру Swift 2.0, вы увидите .selectRow, определяемую как:

func selectRow(row: Int, inComponent component: Int, animated: Bool) 

вариант.selectRow в Xcode отображает следующее:

enter image description here

Ответ 4

Вы должны отправить - (void)selectRow:(NSInteger)row inComponent:(NSInteger)component animated:(BOOL)animated перед тем, как он появится. В документации указано, что выбранный методRowInComp... даст -1, поэтому возможно, что просмотрщик находится в состоянии без выбранной строки. Он оказывается в этом состоянии при создании.

Ответ 5

У меня тоже была эта проблема. Но, видимо, существует проблема порядка вызовов методов. Вы должны позвонить:

[self.picker selectRow:2 inComponent:0 animated:YES];

после вызова

[self.view addSubview:self.picker];

Ответ 6

В нормальном случае вы можете сделать что-то подобное в методе viewDidLoad;

[_ picker selectRow: 1 inComponent: 0 анимированный: YES];

В моем случае я хотел бы получить данные с сервера api и отобразить их на UIPickerView, тогда я хочу, чтобы сборщик выбирал элемент first по умолчанию.

UIPickerView будет выглядеть как, он выбрал первый элемент после его создания, но когда вы попытаетесь получить выделенный индекс с помощью selectedRowInComponent, вы получите NSNull. Это потому, что пользователь не обнаружил ничего изменено пользователем (выберите 0 из 0).

Следующее мое решение (в viewWillAppear, после того, как я взял данные)

[_picker selectRow:1 inComponent:0 animated:NO];
[_picker selectRow:0 inComponent:0 animated:NO];

Его немного грязно, но не волнуйтесь, рендеринг пользовательского интерфейса в iOS очень быстрый;)

Ответ 7

For example: you populated your UIPickerView with array values, then you wanted 

чтобы выбрать определенное значение массива в первой загрузке pickerView, например, "Аризона". Обратите внимание, что слово "Аризона" находится в индексе 2. Это как сделать это:) Наслаждайтесь кодированием.

NSArray *countryArray =[NSArray arrayWithObjects:@"Alabama",@"Alaska",@"Arizona",@"Arkansas", nil];
UIPickerView *countryPicker=[[UIPickerView alloc]initWithFrame:self.view.bounds];
countryPicker.delegate=self;
countryPicker.dataSource=self;
[countryPicker selectRow:2 inComponent:0 animated:YES];
[self.view addSubview:countryPicker];