2

我试图通过点击 UIBarButtonItem 来关闭 UIPickerView。所以,我做了一个动作,在这个动作中我称之为 [PickerView removeFromSuperview]。但是,它不起作用。

视图控制器.h

#import <UIKit/UIKit.h>
@interface ViewController : UIViewController< UIPickerViewDelegate,UIPickerViewDataSource>
- (IBAction)dissmissPicker:(id)sender;
@property (nonatomic,strong) NSArray *ColorName;

@end

视图控制器.m:

#import "ViewController.h"

@implementation ViewController
@synthesize ColorName;

// returns the number of 'columns' to display.
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
    return 1;
}

// returns the # of rows in each component..
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{

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

    return [ColorName objectAtIndex:row];

    }
- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Release any cached data, images, etc that aren't in use.
}

#pragma mark - View lifecycle

- (void)viewDidLoad
{

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

    ColorName = [[NSArray alloc]initWithObjects:@"Red",@"White",@"Yellow",@"Green",@"Blue",@"Black",@"Brown",@"Cyan",nil];
   // [pickerview removeFromSuperview];

}
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{

    UIColor *newColor;

    switch (row) {
        case 0:
            newColor = [UIColor redColor];
            break;
        case 1:
            newColor = [UIColor whiteColor];
            break;       
        case 2:
            newColor = [UIColor yellowColor];
            break;        
        case 3:
            newColor = [UIColor greenColor];
            break;            
        case 4:
            newColor = [UIColor blueColor];
            break;        
        case 5:
            newColor = [UIColor blackColor];
            break;     
        case 6:
            newColor = [UIColor brownColor];
            break;
        case 7:
            newColor =[UIColor cyanColor];
            break;
        default:
            newColor = [UIColor redColor];
            break;
    }
 self.view.backgroundColor = newColor;

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

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

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

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

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

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

- (IBAction)dissmissPicker:(id)sender {


    [pickerView removeFromSuperview];

}
4

3 回答 3

2

我假设您正在使用界面生成器的评论?

如果是这种情况,您需要制作一个插座并将其连接到 IB 中。

- 在您的 .h 文件中创建插座

IBOutlet UIPickerView *picker;

- 在界面生成器中连接插座

- 关闭视图

[picker removeFromSuperview];
于 2012-05-31T17:21:44.220 回答
0

您的 PickerView 是如何添加到视图中的?它是否以模态方式呈现,添加为子视图等?

在前者的情况下,您将调用-[dismissModalViewControllerAnimated:]调用该选择器的类或从选择器自身中调用。

在后者的情况下,您的-[removeFromSuperview]方法应该可以正常工作。

如果它是使用navigationController 推送的,您应该可以只调用该[popViewControllerAnimated:]navigationController 的- 方法。

于 2012-05-31T15:37:56.740 回答
0

制作一个新的 iVar,合成它并在

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
    self.yourPickerViewiVar = pickerView;
    return 1;
}

例如。然后你可以在你的 IBAction 中使用它,Xcode 不会继续说“未知”之类的东西。

- (IBAction)dissmissPicker:(id)sender {
    [self.yourPickerViewiVar removeFromSuperview];
}
于 2012-05-31T15:42:09.437 回答