2016-01-07 3 views
5

Я работаю над таблицей, которая имеет два раздела. И я хотел бы добавить headerView во второй заголовок раздела.GetHeightForHeader и GetViewForHeader не вызываются

Я внедрил следующий код. Он называет TitleForHeader, но, к сожалению, ни GetHeightForHeader, ни GetViewForHeader не вызываются вообще. У кого-нибудь есть ключ?

public override string TitleForHeader (UITableView tableView, nint section) 
{ 
    if (section == 0) 
    { 
    return "Details"; 
    } 
    if (section == 1) 
    { 
    return "Settings"; 
    } 

return ""; 
} 

public override nfloat GetHeightForHeader(UITableView tableView, nint section) 
{ 
    if (section == 0) 
    { 
     return 0.0001f; 
    } 
    if (section == 1) 
    { 
     return 100.0f; 
    } 
    return UITableView.AutomaticDimension; 
} 

public override UIView GetViewForHeader(UITableView tableView, nint section) 
{ 
    if (section == 1) { 
    UIView headerView = new UIView (new CGRect (0, 0, (float)tableView.Bounds.Width, (float)tableView.SectionHeaderHeight)); 
    headerView.BackgroundColor = UIColor.Black; 
    return headerView; 
    } 
    else { 
     return null; 
    } 
} 
+0

Я думаю, что TitleForHeader и ViewForHeader являются взаимоисключающими. Попробуйте удалить TitleForHeader. – Jason

+0

Я также попытался удалить 'TitleForHeader', но все же он не попал в' GetViewFoHeader' и 'GetHeightForHeader'. – hotspring

ответ

2

У меня была та же проблема, только понял, что ставило делегат и источник так:

Table.Delegate = new TableDelegate(this); //remove this bit 
Table.Source = new TableSource<string>(list, Table); 

я понял, что я должен использовать только UITableViewSource и не устанавливать оба.

UITableViewSource заменяет следующие два класса, которые по-прежнему доступны в Xamarin.iOS, но, как правило, не требуется:

UITableViewDataSource - Протокол на Objective-C, который моделируется в Xamarin.iOS как абстрактный класс. Должен быть подклассом, чтобы предоставить таблицу с представлением для каждой ячейки, а также информацию о заголовках, нижних колонтитулах и количестве строк и разделов в таблице.

UITableViewDelegate - Протокол Objective-C, который моделируется в Xamarin.iOS как класс. Обрабатывает функции выбора, редактирования и другие необязательные функции таблицы.

Xamarin docs

Я просто переехал мой rowselected метод в моем TableSource и теперь он называет TitleForHeader и GetViewForHeader методы (они не являются взаимоисключающими) и толькоустановить источник не делегат.

0

Если бы тот же вопрос, я просто забыл установить делегат в viewDidLoad

public override void ViewDidLoad() 
{ 
    base.ViewDidLoad(); 

    TableView.DataSource = new YourViewControllerTableDataSource(); 
    TableView.Delegate = new YourViewControllerTableDelegate(); 

}