2017-11-13 24 views
6

की सदस्यता के लिए मैं इस कस्टम रेंडरर का उपयोग कर रहा जरूरत है:मैं अब इस आईओएस रेंडरर को आसान बनाने में कर सकते हैं कि मैं अब स्पष्ट रूप से संपत्ति-बदल-घटना

public class ExtViewCellRenderer : ViewCellRenderer 
{ 
    UITableViewCell _nativeCell; 

    public override UITableViewCell GetCell(Cell item, UITableViewCell reusableCell, UITableView tv) 
    { 
     _nativeCell = base.GetCell(item, reusableCell, tv); 
     var formsCell = item as ExtViewCell; 

     if (formsCell != null) 
     { 
      formsCell.PropertyChanged -= OnPropertyChanged; 
      formsCell.PropertyChanged += OnPropertyChanged; 
     } 
     SetTap(formsCell); 

     return _nativeCell; 
    } 

    void OnPropertyChanged(object sender, PropertyChangedEventArgs e) 
    { 
     var formsCell = sender as ExtViewCell; 
     if (formsCell == null) 
      return; 

     if (e.PropertyName == ExtViewCell.NoTapProperty.PropertyName) 
     { 
      SetTap(formsCell); 
     } 
    } 

    private void SetTap(ExtViewCell formsCell) 
    { 
     if (formsCell.NoTap) 
      _nativeCell.SelectionStyle = UITableViewCellSelectionStyle.None; 
     else 
      _nativeCell.SelectionStyle = UITableViewCellSelectionStyle.Default; 
    } 

} 

मैंने पढ़ा है कि यह अब स्पष्ट रूप से करने के लिए आवश्यक है एक TextCellRenderer साथ प्रॉपर्टी-चेंज-इवेंट की सदस्यता लें क्योंकि बेस ओवररिडेबल विधि HandlePropertyChanged है जिसे इस संदर्भ में दोबारा उपयोग किया जा सकता है।

क्या कोई मुझे बता सकता है कि यह ViewCellRenderer के लिए भी मामला है और यदि ऐसा है तो मैं इसका उपयोग करने के लिए इस कोड को कैसे संशोधित कर सकता हूं? लेकिन यहाँ नहीं

public override UITableViewCell GetCell(Cell item, UITableViewCell reusableCell, UITableView tv) 
{ 
    var textCell = (TextCell)item; 
    var fullName = item.GetType().FullName; 
    cell = tv.DequeueReusableCell(fullName) as CellTableViewCell; 

    //... 

:

मैं भी एक और रेंडरर में इस तरह कोड को देखा। क्या यह Cell = tv.DequeueReusableCell करना आवश्यक है?

+0

व्यूसेलर प्रस्तुतकर्ता स्रोत: https://github.com/xamarin/Xamarin.Forms/blob/master/Xamarin.Forms.Platform.iOS/Cells/ViewCellRenderer.cs – Nkosi

+0

टेक्स्टसेलर विक्रेता स्रोत: https://github.com/xamarin /Xamarin.Forms/blob/master/Xamarin.Forms.Platform.iOS/Cells/TextCellRenderer.cs – Nkosi

+0

'TextCellRenderer' में 'वर्चुअल वर्चुअल शून्य हैंडलप्रॉपर्टी चेंज' है जिसे ओवरराइड किया जा सकता है, हालांकि 'ViewCellRenderer' अपने 'ViewCellPropertyChanged को उजागर नहीं कर रहा है 'क्योंकि यह' निजी 'है – Nkosi

उत्तर

2

मैंने पढ़ा है कि यह अब आवश्यक है एक TextCellRenderer साथ स्पष्ट रूप से संपत्ति-बदल-घटना की सदस्यता के लिए वहाँ के रूप में एक आधार overridable विधि HandlePropertyChanged कि इस संदर्भ में फिर से इस्तेमाल किया जा सकता है।

हाँ कि इसके स्रोत कोड के अनुसार सही है

protected virtual void HandlePropertyChanged(object sender, PropertyChangedEventArgs args) { 
    //... 
} 

TextCellRenderer Source

कोई मुझे बता सकते हैं कि इस मामले ViewCellRenderer के लिए भी है और यदि ऐसा है तो मैं कैसे संशोधित कर सकते इस कोड का उपयोग करने के लिए?

कोई यह नहीं मामले में भी ViewCellRenderer के लिए स्रोत कोड के अनुसार ViewCellRenderer उजागर नहीं कर रहा है के रूप में है इसके ViewCellPropertyChanged यह है के रूप में private

void ViewCellPropertyChanged(object sender, PropertyChangedEventArgs e) { 
    //... 
} 

ViewCellRenderer Source

तुम हमेशा यह अपने आप को संशोधित कर सकता है और उस सुविधा को जोड़ने के लिए एक पुल अनुरोध बनाएं।

संबंधित मुद्दे