2015-11-01 30 views
-1

我向UITableViewCell添加了UIPickerView。我添加了大約5個條目。現在,當我嘗試選擇一個值時,使用正確的行調用- (void)pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component函數。但是在屏幕上,UIPickerView「滾動」回第一個元素,並且不會粘到選定的值上。UIPickerView發佈後返回第0行

任何人都有同樣的問題?

EventSelectCell.h

@class EventSelectCell; 

@protocol EventSelectCellDelegate <NSObject> 

    - (void)selectedEvent:(Event*)selectedEvent; 

@end 

@interface EventSelectCell : UITableViewCell <UIPickerViewDataSource, UIPickerViewDelegate> 

    @property (strong, nonatomic) id <EventSelectCellDelegate> delegate; 

    @property (weak, nonatomic) IBOutlet UIPickerView *selectWheel; 

@end 

EventSelectCell.m

#import "EventSelectCell.h" 

@implementation EventSelectCell 
{ 
    EventManager* eventManager; 
    NSArray* listOfEvents; 
} 

- (void)awakeFromNib { 
    self.selectWheel.delegate = self; 
    self.selectWheel.dataSource = self; 

    // get the EventManger 
    eventManager = [EventManager sharedEventManager]; 

    listOfEvents = [eventManager getListOfEvents]; 

    [self.selectWheel reloadAllComponents]; 
} 

- (void)setSelected:(BOOL)selected animated:(BOOL)animated { 
    [super setSelected:selected animated:animated]; 

    // Configure the view for the selected state 
} 

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)thePickerView { 

    return 1; 
} 

- (NSInteger)pickerView:(UIPickerView *)thePickerView numberOfRowsInComponent:(NSInteger)component { 

    return [listOfEvents count]; 
} 

- (NSString *)pickerView:(UIPickerView *)thePickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { 
    Event* selectedEvent = [listOfEvents objectAtIndex:row]; 

    return [selectedEvent name]; 
} 

- (void)pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { 
    Event* selectedEvent = [listOfEvents objectAtIndex:row]; 

    [self.delegate selectedEvent:selectedEvent]; 
} 

@end 

委託

- (void)selectedEvent:(Event*)selectedEvent { 
    [playersInGame removeAllObjects]; 

    [playersInGame addObjectsFromArray:[self.eventManager getPlayersInEvent:selectedEvent onlyActive:YES]]; 

    [selectedEvent setIsActive:[NSNumber numberWithInt:1]]; 

    activeEvent = selectedEvent; 

    [self.tableView reloadData]; 
} 
+0

如果可能從didSelectRow發佈了一些代碼也許您正在重新加載pickerview數據或重繪pickerview – Yan

+0

由於@matt指出可能會在委託方法中發生某些情況。我認爲一切都很好。 – Yan

回答

-1

好吧,我發現這個問題。 UIPickerView位於UITableViewCell中。每當有人用我稱爲[self.tableView reloadData]的UIPickerView選擇了一些內容時,這會導致該表重新加載,並且還會重新初始化UIPickerView。

現在我只是重新加載表中的singel部分。