UIPickerView 释放后回到第 0 行
UIPickerView goes back to row 0 when released
我将 UIPickerView 添加到 UITableViewCell。我正在向其中添加大约 5 个条目。现在,当我尝试 select 一个值时,会使用正确的行调用 - (void)pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
函数。但是在屏幕上 UIPickerView "scrolls" 回到第一个元素并且不坚持 selected 值。
有人遇到同样的问题吗?
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];
}
好的,我找到问题了。 UIPickerView 在 UITableViewCell 中。每当有人使用我调用的 [self.tableView reloadData]
的 UIPickerView 选择某些内容时,这会导致 table 重新加载并再次初始化 UIPickerView。
现在我只是重新加载 table 中的单个部分。
我将 UIPickerView 添加到 UITableViewCell。我正在向其中添加大约 5 个条目。现在,当我尝试 select 一个值时,会使用正确的行调用 - (void)pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
函数。但是在屏幕上 UIPickerView "scrolls" 回到第一个元素并且不坚持 selected 值。
有人遇到同样的问题吗?
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];
}
好的,我找到问题了。 UIPickerView 在 UITableViewCell 中。每当有人使用我调用的 [self.tableView reloadData]
的 UIPickerView 选择某些内容时,这会导致 table 重新加载并再次初始化 UIPickerView。
现在我只是重新加载 table 中的单个部分。