簡體   English   中英

同一視圖中的兩個uipicker

[英]Two uipicker in the same view

我想做的是將兩個uipickers放在同一視圖上,我讀到某個地方,其中一個應該有自己的單獨委托,但我無法使其正常工作。

有時,當我運行該應用程序時,第二個應用程序將停止運行,並且在控制台上沒有錯誤。

這是該視圖的.h文件:

@interface FirstViewController : UIViewController {

IBOutlet UIPickerView *cities;
NSMutableArray *array;
NSString *picked;
}

@property(nonatomic,retain) IBOutlet UIPickerView *cities;
@property(nonatomic,retain) IBOutlet NSMutableArray *array;

這是.m:

@implementation FirstViewController
@synthesize cities,array;

-(void) getCities:(NSString *)link{
    url=link;
    NSString *str=[[NSString alloc] initWithContentsOfURL:[NSURL URLWithString:url]];
    if([str length]==0){
        [str release];
        return;
    }

    SBJsonParser *parser=[[SBJsonParser alloc] init];
    array=[[parser objectWithString:str] copy];
    [receivedData release];

}


- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)thePickerView { // This method needs to be used. It asks how many columns will be used in the UIPickerView 
    return 1; // We only need one column so we will return 1. 
}


- (NSInteger)pickerView:(UIPickerView *)thePickerView numberOfRowsInComponent:(NSInteger)component { // This method also needs to be used. This asks how many rows the UIPickerView will have. 
    return [array count]; // We will need the amount of rows that we used in the pickerViewArray, so we will return the count of the array. 
} 


- (void)pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { // what happens when selecting rows
    picked=[array objectAtIndex:row];
} 


- (NSString *)pickerView:(UIPickerView *)thePickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { //method asks for what the title or label of each row will be
    return [array objectAtIndex:row]; // We will set a new row for every string used in the array. 
} 

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad
{
    [sv setScrollEnabled:TRUE];
    [sv setContentSize:CGSizeMake(320, 800)];
    [self getCities:@"any url"];

    [super viewDidLoad];
}


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}


- (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
{
    [super viewDidUnload];

    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}


- (void)dealloc
{
    [super dealloc];
}

@end

對於第二個uipicker,我在視圖中添加了一個nsobject並將其類更改為我之前創建的“ SecondPickerDelegate”,這是其代碼:
。H

#import <UIKit/UIKit.h>


@interface FirstViewSecondPickerDelegate :  UIViewController<UIPickerViewDelegate>{

    IBOutlet UIPickerView *specialities;
    NSMutableArray *array;
    NSString *picked;
}

@property(nonatomic,retain) IBOutlet UIPickerView *specialities;
@property(nonatomic,retain) NSMutableArray *array;
@property(nonatomic,retain) NSString *picker;

@end

.m文件:

#import "FirstViewSecondPickerDelegate.h"
#import "JSON.h"


@implementation FirstViewSecondPickerDelegate
@synthesize specialities,array,picker;

-(void) getSpecialities:(NSString *)link{
    url=link;
    NSString *str=[[NSString alloc] initWithContentsOfURL:[NSURL URLWithString:url]];
    if([str length]==0){
        [str release];
        return;
    }

    SBJsonParser *parser=[[SBJsonParser alloc] init];
    array=[[parser objectWithString:str] copy];
    for(int i=0;i<[array count];i++){
        NSLog(@"index %i",i);
        NSLog(@"value %@",[array objectAtIndex:i]);
    }


}
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)thePickerView { // This method needs to be used. It asks how many columns will be used in the UIPickerView 
    return 1; // We only need one column so we will return 1. 
}


- (NSInteger)pickerView:(UIPickerView *)thePickerView numberOfRowsInComponent:(NSInteger)component { // This method also needs to be used. This asks how many rows the UIPickerView will have. 
    return [array count]; // We will need the amount of rows that we used in the pickerViewArray, so we will return the count of the array. 
} 


- (void)pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { // what happens when selecting rows
    picked=[array objectAtIndex:row];
} 


- (NSString *)pickerView:(UIPickerView *)thePickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { //method asks for what the title or label of each row will be
    return [array objectAtIndex:row]; // We will set a new row for every string used in the array. 
} 


- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
        picked=@"1";
        [self getSpecialities:@"http://localhost:8080/Test/gs"];
    }


    return self;
}
/*
-(void) viewDidLoad{
    [super viewDidLoad];

}

*/

- (void)dealloc
{

    [super dealloc];
}

- (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.
}

#pragma mark - View lifecycle

/*
// Implement loadView to create a view hierarchy programmatically, without using a nib.
- (void)loadView
{
}
*/


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

    [super viewDidLoad];
}


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

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

@end

如果有任何適合這種情況的示例,請提供幫助。

在同一視圖中,兩個UIPickerView不需要單獨的委托。

使用UIPickerView tag屬性,然后可以在委托方法中區分它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM