Цель-C: Нажмите на UIDownPicker и получите значение для UITextfield - PullRequest
0 голосов
/ 15 октября 2018

Мой код, приведенный ниже, извлечет название страны и код страны с сервера и сохранит в коде 2 NSMutablleMArray, countryMArray и codeMArray.Когда пользователь выбирает txtCountry UITextField, он будет вызывать picker list, а когда пользователь выбирает страну и нажимает Готово, он будет на основе индекса и получать Country Code from codeMArray и вводить txtCode UITexField

Вместо нажатияГотово, я хочу, чтобы пользователь мог нажать на страну в списке выбора, и значение будет переведено в UITextField

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

RootViewController.h

#import <UIKit/UIKit.h>
#import "LoginViewController.h"
#import <DownPicker/UIDownPicker.h>

@protocol LoginViewProtocol <NSObject>

- (void)dismissAndLoginView;

@end

@interface RootViewController : UIViewController     <UITextFieldDelegate,UITableViewDelegate>
@property (strong, nonatomic) IBOutlet UITextField *txtCountry;
@property (weak, nonatomic) IBOutlet UIDownPicker *downCountry;
@property (strong, nonatomic) IBOutlet UITextField *txtCode;
@property (strong, nonatomic) IBOutlet UITextField *txtPhone;
@property (strong, nonatomic) NSMutableArray *countryMArray;
@property (strong, nonatomic) NSMutableArray *codeMArray;
@property (nonatomic) DownPicker *pickerCountry;

@end

RootViewController.m

#import "RootViewController.h"
#import <QuartzCore/QuartzCore.h>

@interface RootViewController (){
    NSString *sURL,*sResponseData, *sRemaining;
    NSString *sCode;

}
@end

@implementation RootViewController

@synthesize loginView;
@synthesize txtCountry,txtCode,txtPhone;
@synthesize countryMArray;
@synthesize codeMArray;

- (void)viewDidLoad
{
    [super viewDidLoad];

    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];

    [self.view addGestureRecognizer:tap];

    //=== Initiallize the Mutable Array
    countryMArray = [[NSMutableArray alloc] init];
    codeMArray = [[NSMutableArray alloc] init];

    //=== Initialize the responseData Mutable Data
    self.responseData = [NSMutableData data];

    //=== Pass the string to server to get the return Country response.write
    appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    sURL = @"https://www.share-fitness.com";
    sURL = [sURL stringByAppendingString:@"/apps/getcountry.asp?"];

    NSURLRequest *requestCountry = [NSURLRequest requestWithURL:[NSURL URLWithString:sURL]];

    (void) [[NSURLConnection alloc] initWithRequest:requestCountry delegate:self];

    //=== Pass the string to server to get the return CountryCode
    sURL = @"https://www.share-fitness.com";
    sURL = [sURL stringByAppendingString:@"/apps/getctcode.asp?"];

    NSURLRequest *requestCode = [NSURLRequest requestWithURL:[NSURL URLWithString:sURL]];

    (void) [[NSURLConnection alloc] initWithRequest:requestCode delegate:self];

    //=== Initialie the picker ====
    self.pickerCountry = [[DownPicker alloc] initWithTextField:self.txtCountry withData:countryMArray];

    [self.pickerCountry addTarget:self
                       action:@selector(pickerClicked:)
             forControlEvents:UIControlEventValueChanged];

}



 //=== Pick the countryCode, when Country is selected based on Array Index
 -(void)pickerClicked:(id)dp {

    NSString* selectedValue = [self.pickerCountry text];

    for ( int i = 0 ; i < countryMArray.count; i++) {

        NSString*item = [countryMArray objectAtIndex:i];

        if([item isEqualToString:selectedValue])
        {
            sCode = [codeMArray objectAtIndex:i];
            txtCode.text = [@"+"stringByAppendingString:sCode];

            break;
        }

    }
}

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

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

См. Следующие темы:

-UItableview -UItableview делегаты(****) - Пользовательская UItableviewcell - Различные контроллеры вида - Навигационные контроллеры

0 голосов
/ 15 октября 2018

Я не знаю, почему вы не использовали didSelectRow для PickerView.Но!У меня есть идея.Как насчет этого?вы уже используете UITapGestureRecognizer для своего представления. Итак, во-первых, создайте еще один UITapGestureRecognizer и добавьте PickerView, когда появится pickerView.Второе, когда пользователь касается ячейки в pickerView, запускает действие pickerView.и когда затем удалите его из супер просмотра.

  UITapGestureRecognizer *tap1;

init

self.tap1 = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissPicker)];

В методе, который вы показываете pickerView ..

[self.pickerView setHidden:NO];         
[self.pickerView addGestureRecognizer:tap1];

- (void) pickerView: (UIPickerView *) pickerView

self.textField.text = sCode;
[self.pickerView resignFirstResponder];
[self.pickerView setHidden:YES];
[self.tap1 removeFromSuperView];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...