iPhone - 从UIPickerView更新标签

问题描述:

我有两个UIPickerViews设置在同一个视图控制器下的一个视图。选择器似乎按照预期填充了值。我也有每个选择器的标签。标签随每个值更改而更新,但标签上显示的值不正确。它始终关闭10.代码如下。iPhone - 从UIPickerView更新标签

接口:

#import <UIKit/UIKit.h> 
#import "InfoViewController.h" 



@interface TransactionsViewController : UIViewController { 

    //Deposit 
    NSMutableArray *depositArray; 
    IBOutlet UIPickerView *depositPicker; 
    IBOutlet UILabel *depositLabel; 

    //Send 
    NSMutableArray *sendArray; 
    IBOutlet UIPickerView *sendPicker; 
    IBOutlet UILabel *sendLabel; 
} 

@property (nonatomic, retain) NSMutableArray *depositArray; 
@property (nonatomic, retain) IBOutlet UIPickerView *depositPicker; 
@property (nonatomic, retain) NSMutableArray *sendArray; 
@property (nonatomic, retain) IBOutlet UIPickerView *sendPicker; 
@property (nonatomic, retain) IBOutlet UILabel *depositLabel; 
@property (nonatomic, retain) IBOutlet UILabel *sendLabel; 

@end 

实现:

#import "TransactionsViewController.h" 


@implementation TransactionsViewController 
@synthesize depositArray; 
@synthesize depositPicker; 
@synthesize sendArray; 
@synthesize sendPicker; 
@synthesize depositLabel; 
@synthesize sendLabel; 


} 



// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. 
- (void)viewDidLoad { 
    [super viewDidLoad]; 


    NSMutableArray *dollarsArray = [[NSMutableArray alloc] init]; 
    for (int i = 5; i <= 100; i+=5) 
    { 
     NSString *item = [[NSString alloc] initWithFormat:@"%i", i]; 
     [dollarsArray addObject:item]; 

     [item release]; 
    } 

    self.depositArray = dollarsArray; 
    self.sendArray = dollarsArray; 

    [dollarsArray release]; 


} 

// Pickers 
#pragma mark - Pickers 
#pragma mark Pickers Data Source Methods 

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

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component 
{ 
    if(pickerView == depositPicker) { 
    switch(component) { 
     case 0: 
      return 1; 
      break; 
     case 1: 
      return [depositArray count]; 
      break; 
     default: 
      break; 
    } 
    } 
    else if(pickerView == sendPicker) { 
     switch(component) { 
      case 0: 
       return 1; 
       break; 
      case 1: 
       return [sendArray count]; 
       break; 
      default: 
       break; 
     } 
    } 
    return 0; 
} 

-(CGFloat)pickerView:(UIPickerView*)pickerView widthForComponent:(NSInteger)component { 
    switch (component) { 
     case 0: 
      return 50; 
      break; 
     case 1: 
      return 100; 
      break; 
     default: 
      break; 
    } 
    return 0; 
} 

#pragma mark Pickers Delegate Methods 

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component 
{ 
    if(pickerView == depositPicker) { 
    switch(component) { 
     case 0: 
      return @"$"; 
      break; 
     case 1: 
      depositLabel.text=[depositArray objectAtIndex:row]; 
      return [depositArray objectAtIndex:row]; 
      [depositLabel release]; 
      break; 
     default: 
      break; 
    } 
    } 
    else if(pickerView == sendPicker) { 
     switch(component) { 
      case 0: 
       return @"$"; 
       break; 
      case 1: 
       return [sendArray objectAtIndex:row]; 
       break; 
      default: 
       break; 
     } 
    } 
    return 0; 
} 

//Pickers End 


- (void)didReceiveMemoryWarning { 
    // Releases the view if it doesn't have a superview. 
    [super didReceiveMemoryWarning]; 

    // Release any cached data, images, etc that aren't in use. 
} 

- (void)viewDidUnload { 
    // Release any retained subviews of the main view. 
    // e.g. self.myOutlet = nil; 

} 


- (void)dealloc { 
    [depositArray release]; 
    [send release]; 
    [super dealloc]; 

} 


@end 

一切,如sendLabel,是尚未设定。如您所见,depositLabel会自动更新选定的行,但该值不会更新为正确的值。我不确定这是我的标签实现还是选择器本身的问题。

我很欣赏一些输入。谢谢。

titleForRow方法就是您应该返回该行文本的位置。在titleForRow中,在那里设置标签文本是没有意义的(我想也不应该释放它)。 titleForRow末尾的“return 0”也可能导致问题。

要处理拾取器中的实际选择,请使用didSelectRow方法。

+0

非常感谢。有效。 :) – intl 2010-02-18 19:50:53