2014-02-05 2 views
1

Я скачал UIPopOverListView из GitHub, и вставил в моем рабочем пространстве, то при нажатии на кнопке, появится popoverlistview, но делегаты и методы DataSource называются, но не работают должным образом,
Когда моя кнопка нажатаДелегаты и источник данных не работают для UIPopoverListView в iOS?

-(void) effectsButtonClicked 
{ 
effectsPopView = [[UIPopoverListView alloc] initWithFrame:CGRectMake(10,150,300,200)]; 
effectsPopView.delegate=self; 
effectsPopView.datasource=self; 
effectsPopView.listView.scrollEnabled = FALSE; 
[effectsPopView setTitle:@"Effects"]; 
[effectsPopView show]; 
} 

Тогда мой datasouce и делегаты

#pragma mark - UIPopOverListView DataSource 

- (NSInteger)popoverListView:(UIPopoverListView *)popoverListView 
    numberOfRowsInSection:(NSInteger)section 
{ 
return 5; 
} 
- (UITableViewCell *)popoverListView:(UIPopoverListView *)popoverListView 
       cellForIndexPath:(NSIndexPath *)indexPath 
{ 
static NSString *identifier = @"cell"; 
UITableViewCell * effectsCell= [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
             reuseIdentifier:identifier]; 

effectsArray=[NSArray arrayWithObjects:@"Black and White",@"Sepia",@"Hue",@"Snow",@"Normal", nil]; 
effectsCell.textLabel.text=[effectsArray objectAtIndex:indexPath.row]; 
effectsCell.textLabel.textColor=[UIColor redColor]; 
NSLog(@"%@",effectsArray); 
return effectsCell; 
} 

#pragma mark- UIPopoverList Delegates 

- (void)popoverListView:(UIPopoverListView *)popoverListView 
didSelectIndexPath:(NSIndexPath *)indexPath 
{ 
NSLog(@"ROw selected"); 
} 

снимок экрана

enter image description here

Может кто-нибудь объяснить, почему DataSource и делегаты не работают

ответ

1

есть буксирные способы подключения DataSource из (1) добавить от владельца файла (2) из ​​интерфейса

0

Кажется, что внутренне UIPopoverListView инвентарь UITableView. Во всех методах источника данных табличного представления он вызывает открытые методы datasource, которые вы реализуете.

Проблема, что я думаю, заключается в том, что назначение delegate и datasource происходит после того, как вызываются методы данных datasource UITableView. Не существует механизма для их восстановления после установки источника данных UIPopoverListView. В качестве обходного пути вы можете реализовать метод reload, который просто вызовет reloadData на внутреннем экземпляре представления таблицы.

-(void) reload { 
    if(_listView) { 
     [_listView reloadData]; 
    } 
} 

Declare этот метод в файле .h и вызвать его в коде,

-(void) effectsButtonClicked 
{ 
     effectsPopView = [[UIPopoverListView alloc] initWithFrame:CGRectMake(10,150,300,200)]; 
     effectsPopView.delegate=self; 
     effectsPopView.datasource=self; 
     effectsPopView.listView.scrollEnabled = FALSE; 
     [effectsPopView setTitle:@"Effects"]; 
     //Call here before presenting. 
     [effectsPopView reload]; 
     [effectsPopView show]; 

}

Это не может быть идеальным решением, просто обходной путь. Вы должны указать ошибку на странице github проекта, чтобы исходный автор мог предоставить исправление.

Надеюсь, что это поможет!

0

Вы должны реализовать метод, как по умолчанию инициализации в вашем UIPOpoverListView классе или вам необходимо перезагрузить таблицу в popoverltstView Показать метод - (Недействительными) показать { // перезарядка таблицы здесь

}

Смежные вопросы