-1

私はこれに非常に近いです...この目的のために、2つのテキストボックスがあります。押されると、UI ピッカーが呼び出されます。

テキスト ボックス 1 は値 1,2,3,4 を返します

テキストボックス 2 は値 A、B、C、D を返します

問題は、ピッカーがテキスト ボックス 2 に表示されると、テキスト ボックス 1 の値が表示されるにもかかわらず、テキスト ボックス 2 から適切な行が選択されることです。誰かが私のコードをチェックして、どこでエラーを起こしているか教えてもらえますか?

.h

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UIPickerViewDataSource,     UIPickerViewDelegate,UITextFieldDelegate>

{
//decalre picker
UIPickerView *select;



//declare NSArrray
NSArray *arrStatus;
NSArray *arrStatus2;


}






@property (strong, nonatomic) IBOutlet UITextField *text1;
- (IBAction)Value:(id)sender;
@property (strong, nonatomic) IBOutlet UITextField *text2;


@end

.m

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController
@synthesize text2;

@synthesize text1;

- (void)viewDidLoad
{



select = [[UIPickerView alloc] initWithFrame:CGRectZero];
select.delegate = self;
select.dataSource = self;
[select setShowsSelectionIndicator:YES];
text1.inputView = select;
text2.inputView = select;     


arrStatus = [[NSArray alloc] initWithObjects:@"1",@"2",@"3",@"4",nil];
arrStatus2 = [[NSArray alloc] initWithObjects:@"A",@"B",@"C",@"D",nil];


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

-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
 {
//set number of rows
return arrStatus.count;
return arrStatus2.count;

}

-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
//set item per row
return [arrStatus objectAtIndex:row];
return [arrStatus2 objectAtIndex:row];



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

 - (void)viewDidUnload
{
[self setText1:nil];
[self setText2:nil];

[super viewDidUnload];
// Release any retained subviews of the main view.
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}

- (IBAction)Value:(id)sender {




NSInteger selectedRow = [select selectedRowInComponent:0];

if([text1 isFirstResponder])
text1.text = [arrStatus objectAtIndex: selectedRow];
[text1 resignFirstResponder];

if ([text2 isFirstResponder])
text2.text = [arrStatus2 objectAtIndex: selectedRow];
[text2 resignFirstResponder];


}

@end

つまり、取得しようとしている 1 つのピッカー ビューを要約すると、1 つの列、2 つの配列、2 つのテキスト ボックスがあります。別のピッカービューを作成しようとしましたが、それも機能しませんでした

4

2 に答える 2

3

return ステートメントはメソッドを終了します。したがって、returnステートメントが 2 つある場合、2 つ目に到達することはありません。これらのメソッドを次のように変更する必要があります。

-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
 {
    if([text1 isFirstResponder])
        return arrStatus.count;
    else
        return arrStatus2.count;
}

-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
     if([text1 isFirstResponder])
         return [arrStatus objectAtIndex:row];
     else
         return [arrStatus2 objectAtIndex:row];
}

お役に立てれば。乾杯!

于 2012-07-30T12:30:42.423 に答える
0

これは、指定された配列でピッカー ビューを表示できるコードであり、テキスト フィールドにはUIPickerViewの最初のデータが含まれます。テキストフィールドのタグを使用してテキストを設定します。

-(void)viewDidLoad
    {
        [super viewDidLoad];

        arrayNo = [[NSArray alloc] initWithObjects:@"1",@"2",@"3",@"4",nil];
        [pickerView selectRow:1 inComponent:0 animated:NO];
        self.text1.text= [arrayNo objectAtIndex:[pickerView selectedRowInComponent:0]];
}
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView;
{
    return 1;
}
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
    mlabel.text=    [arrayNo objectAtIndex:row];
}

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

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component;
{
    return [arrayNo objectAtIndex:row];
}
于 2012-07-30T12:33:09.573 に答える