2013-02-21 2 views
0

Я хочу создать пользовательскую ячейку таблицы для своего iPhone-приложения Monodevelop и xcode 4 на основе monotouch. Я нашел эти статьи:Создать пользовательскую ячейку таблицы с помощью monodevelop и Xcode 4

http://www.alexyork.net/blog/2011/07/18/creating-custom-uitableviewcells-with-monotouch-the-correct-way/

http://slodge.blogspot.co.uk/2013/01/uitableviewcell-using-xib-editor.html

этим два статьи я создаю класс, как это:

[Register("ListingCell")] 
public partial class ListingCell : UITableViewCell 
{ 
    public ListingCell() : base() 
    { 
    } 

    public ListingCell (IntPtr handle) : base(handle) 
    { 

    } 

    public void BindDataToCell(DrivedProperty _property) 
    { 
     LocatoinLbl.Text = _property .LocationString ; 

    } 
    public void AddImageToCell(UIImage _image){ 
     ListingThumbnail .Image = _image ; 
    } 
} 

и я разработал мои UITableViewCell и определенные выходов. Тогда в моем GetCell метода, который я использовал коды, как это:

public override UITableViewCell GetCell (UITableView tableView, MonoTouch.Foundation.NSIndexPath indexPath) 
     { 
      ListingCell cell; 
cell = (ListingCell) tableView.DequeueReusableCell (identifier) ; 
      if (cell == null) { 
       cell = new ListingCell(); 
       var views = NSBundle.MainBundle.LoadNib("ListingCell", cell, null); 
       cell = Runtime.GetNSObject(views.ValueAt(0)) as ListingCell; 
      } 
var item = Controller.Items [indexPath.Row]; 
      cell.Tag = indexPath.Row; 
      cell .BindDataToCell (item); 
cell.AddImageToCell (item .Image); 
return cell; 
     } 

Теперь Application сборки хорошо, но когда я запускаю его Debuger GetS ошибки с этой линией:

var views = NSBundle.MainBundle.LoadNib("ListingCell", cell, null); 

и говорит:

MonoTouch.Foundation.MonoTouchException: Objective-C exception thrown. Name: NSInternalInconsistencyException Reason: Could not load NIB in bundle: 'NSBundle </Users/john/Library/Application Support/iPhone Simulator/6.0/Applications/08FFAA89-4AC4-490D-9C1A-4DE4CBC6EBB7/Realtyna_iPhone_Project.app> (loaded)' with name 'ListingCell' 

Realy Я не знаю, для чего это. Когда я удалю его. Приложение делает аранжировку с объектом ячейки в моем классе ListingCell. Я запустил много поисков в Интернете, но не нашел никаких решений. Есть ли у любого органа какие-либо идеи об этом?

Я обнаружил, что можно создать программную ячейку программно. и это будет работать, но проблема в том, что создание сложных ячеек программным образом во время выполнения затруднено. Просто мы создаем эти ячейки с помощью excode, но не знаем, почему он не работает: -S

ответ

0

Я не совсем уверен, в чем проблема, которую вы видите.

Если вы работаете только с iOS6, то это может помочь, если вы переключитесь на новый API для регистрации NIB и удаления табличных ячеек вместо использования кода LoadNib.

Я обнаружил, что переключение помогло сделать мой код более надежным.

Так, впишите вашу ячейку:

tableView.RegisterNibForCellReuse(UINib.FromName("ListingCell", NSBundle.MainBundle), ListingCell.Identifier); 

Затем измените DEQUEUE код:

public override UITableViewCell GetCell (UITableView tableView, MonoTouch.Foundation.NSIndexPath indexPath) 
{ 
    ListingCell cell = (ListingCell) tableView.DequeueReusableCell (ListingCell.Identifier, indexPath) ; 
    var item = Controller.Items [indexPath.Row]; 
    cell.Tag = indexPath.Row; 
    cell .BindDataToCell (item); 
    cell.AddImageToCell (item .Image); 
    return cell; 
} 

Это основано на одной из статей, которые вы упомянули - http://slodge.blogspot.co.uk/2013/01/uitableviewcell-using-xib-editor.html (отказа от ответственности - я это написал!)


Realy Я надеваю» знаю, для чего это

И я не - так что не уверен, если это поможет или нет ...


Помимо> Ваш AddImageToCell код пахнет не так со мной - запахами, как вы могли бы ударить проблема с памятью, если ваш список большой.

+0

Спасибо за ваш ответ. Это не работает для меня. когда я меняю 'cell = (ListCell) tableView.DequeueReusableCell (идентификатор) 'to' cell = (ListingCell) tableView.DequeueReusableCell (идентификатор, indexPath) 'приложение вызывает ошибку аргумента ivalid. Я игнорирую это и меняю 'var views = NSBundle.MainBundle.LoadNib ("ListingCell", cell, null)' to 'var views = NSBundle.MainBundle.LoadNib ("ListingCell", cell, null)' и комментирует следующую строку. Теперь приложение получает ошибку с моими объектами, такими как «LocatoinLbl» во время выполнения –

+0

Что касается добавления изображений и ошибок памяти. Я позаботился об этом в своем методе get cell. Основывается на примере ленивого стола xamarin. –

+0

Возможно, это связано с параметром 'nibName', который я использую в методе LoadNib. Просто я использую свой собственный класс ячеек. но, похоже, в этом вопросе http://stackoverflow.com/questions/7184206/loading-custom-table-view-cells-from-nib-files?rq=1 ответ говорит, что это другое дело. Я ошибаюсь в отношении «nibName»? –

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