0

配列からデータをロードして適切に表示するカスタム ピッカー ビューを xib で作成しました。今私の問題は、このピッカービューがスクロールされないことです。実際には、このピッカー ビューは別のビューに読み込まれます。そのため、ピッカー ビューをクリックすると、クリックは、これがロードされているベース ビューにあるように見えます。以下はコードです。この問題を修正する方法を教えてください。ありがとう

#import <UIKit/UIKit.h>
@class PickerView;

@protocol PickerViewDelegate <NSObject>

-(void) didSelectValueAtIndex;

@end

@interface PickerView : UIView <UIPickerViewDataSource, UIPickerViewDelegate>
@property (strong, nonatomic) IBOutlet UIPickerView *pickerView;
@property (nonatomic,weak) id<PickerViewDelegate> PickerViewDelegate;

-(id) showPickerView : (UIButton *) senderButton dataArray: (NSArray *) dataArray viewframe: (CGRect) viewFrame;
-(void) hidePickerView : (UIButton *) senderButton;
@end


#import "PickerView.h"

@interface PickerView ()
@property (nonatomic,retain) NSArray * pickerData;
@property (nonatomic,retain) UIButton *button;
@end

@implementation PickerView
@synthesize pickerView;
@synthesize PickerViewDelegate;

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
    }
    return self;
}

-(id) showPickerView : (UIButton *) senderButton dataArray: (NSArray *) dataArray viewframe:(CGRect)viewFrame{
    self.button = senderButton;
   self.pickerView = (UIPickerView *)[super init];

        if (self) {

            //inorder to load xib
            NSArray *theView = [[NSBundle mainBundle] loadNibNamed:@"PickerView" owner:self options:nil];
            UIView *pickerviewLoadedFromXib = [theView objectAtIndex:0];

            CGRect btn = senderButton.frame;
            self.pickerData = dataArray;

            pickerviewLoadedFromXib.frame = CGRectMake(btn.origin.x , btn.origin.y+ viewFrame.size.height, pickerviewLoadedFromXib.frame.size.width, pickerviewLoadedFromXib.frame.size.height);


            [UIView beginAnimations:nil context:nil];
            [UIView setAnimationDuration:1.0];
            pickerviewLoadedFromXib.frame = CGRectMake(btn.origin.x, btn.origin.y+btn.size.height, btn.size.width, 200);
            [UIView commitAnimations];
            [senderButton.superview addSubview:self];
            [self addSubview:pickerviewLoadedFromXib];
            }

    return self;
}

-(void) hidePickerView : (UIButton *) senderButton{

    NSLog(@"hide picker view");
}

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

-(NSInteger) pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    return self.pickerData.count;
}

-(NSString *) pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    return [self.pickerData objectAtIndex:row];
}

-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
    NSLog(@"selectd value %@", [self.pickerData objectAtIndex:row]);
}

@end
4

1 に答える 1

0
pickerviewLoadedFromXib.delegate = self;
pickerviewLoadedFromXib.dataSource = self;

pickerviewloadedfromxib 変数を取得した後、これら 2 つを入力します...

于 2014-01-31T05:28:16.833 に答える