Apple's docs for UITableView dequeueReusableCellWithIdentifier:forIndexPath: 
clearly says that when a new cell must be created the 
initWithStyle:reuseIdentifier: constructor is called. This doesn't seem to 
happen with MonoTouch as it calls the IntPtr constructor. Mono's API docs for 
iOS don't say anything on the subject under either Classic or Unified. Articles 
and SO seem to agree that this is the behavior expected.


Thanks,
Michael McGlothlin
Sent from my iPhone

> On Jan 15, 2015, at 3:03 AM, Rolf Bjarne Kvinge <r...@xamarin.com> wrote:
> 
> 
> 
>> On Wed, Jan 14, 2015 at 8:21 PM, Michael McGlothlin 
>> <mike.mcgloth...@gmail.com> wrote:
>>  public class SubtitleTableViewCell : UITableViewCell {
>>   public SubtitleTableViewCell () : this ( typeof ( SubtitleTableViewCell 
>> ).FullName ) {
>>   }
>> 
>> 
>>   public SubtitleTableViewCell ( string reuseIdentifier ) : base ( 
>> UITableViewCellStyle.Subtitle, reuseIdentifier ) {
>>   }
>> 
>> 
>>   protected SubtitleTableViewCell ( IntPtr handle ) : base ( handle ) {
>>   }
>>  }
> 
> This is not a correct pattern, iOS will not call the constructors that set 
> the Subtitle constructors.
> 
> However I'm not sure what the correct code is; a quick google search 
> indicates that you'll need a constructor that takes an NSCoder, but that 
> might not be correct.
> 
> I recommend that you ask in the forums or on stackoverflow, that'll get much 
> more visibility to your question (few people read this mailing list now).
> 
> Rolf
> 
>  
>> 
>> If I use a class like this then I get a cell of the default style. If I 
>> don't pass the pointer to base ( handle ) then it uses the subtitle style.
>> 
>> 
>>> On Wed, Jan 14, 2015 at 12:55 PM, Rolf Bjarne Kvinge <r...@xamarin.com> 
>>> wrote:
>>> Hi,
>>> 
>>> You should chain to the corresponding base constructor like this:
>>> 
>>> public MyTableViewCell (IntPtr handle) : base (handle)
>>> {
>>> ...
>>> }
>>> 
>>> if that doesn't work, something else is going wrong. Can you show your 
>>> MyTableViewCell code?
>>> 
>>> Rolf
>>> 
>>>> On Wed, Jan 14, 2015 at 6:16 PM, Michael McGlothlin 
>>>> <mike.mcgloth...@gmail.com> wrote:
>>>> In experimenting it seems you need an actual subclass to set the cell 
>>>> style as you never manually call the cell constructor and there is no 
>>>> other way to choose the style.
>>>> 
>>>> If I pass the handle to base ( handle ) it appears that the default 
>>>> constructor, that configures the style and reuse identifier by passing 
>>>> these to base ( style, reuseIdentifier ), never gets called?
>>>> 
>>>> I probably won't actually use the styles anyway but it doesn't seem to 
>>>> work as I'd expect. Mostly trying to get a clearer picture of what is 
>>>> going on. Since starting transitioning to Universal I've noticed several 
>>>> behaviors that seem odd. Trying to determine if I'm doing something new, 
>>>> if things changed, or if they're bugs.
>>>> 
>>>> I noticed yesterday that it is now ok for that special constructor to be 
>>>> protected instead of public. It didn't work on one computer but did on the 
>>>> other .. after the second finished updating Xamarin Studio then it worked 
>>>> on both. So I guess it's actively being worked on?
>>>> 
>>>> 
>>>> Thanks,
>>>> Michael McGlothlin
>>>> Sent from my iPhone
>>>> 
>>>>> On Jan 14, 2015, at 10:49 AM, Jeff Stedfast <j...@xamarin.com> wrote:
>>>>> 
>>>>> Hi Michael,
>>>>> 
>>>>> Hopefully one of the Xamarin.iOS devs can chime in, but the IntPtr handle 
>>>>> that is passed to .ctors is the native object pointer.
>>>>> 
>>>>> If you don't pass it to base, then what happens is that the Xamarin.iOS 
>>>>> runtime creates a new native instance.
>>>>> 
>>>>> My understanding is that you have this:
>>>>> 
>>>>> public MyTableViewCell (IntPtr handle) : base (handle)
>>>>> {
>>>>> ...
>>>>> }
>>>>> 
>>>>> and that you are removing the call to base()...
>>>>> 
>>>>> You shouldn't be doing that afaik.
>>>>> 
>>>>> This .ctor is meant only to be used by the runtime itself and should not 
>>>>> be invoked by your code (it doesn't sound like you are invoking it 
>>>>> yourself, but just in case that wasn't obvious).
>>>>> 
>>>>> I'm not sure if that really helps answer your overall question, but 
>>>>> hopefully it at least helps clarify things a little bit for you.
>>>>> 
>>>>> Jeff
>>>>> 
>>>>>> On Wed, Jan 14, 2015 at 11:40 AM, Michael McGlothlin 
>>>>>> <mike.mcgloth...@gmail.com> wrote:
>>>>>> It appears that custom UITableViewCells must have a constructor that 
>>>>>> takes IntPtr for the automatic reuse to work but I can't see anywhere 
>>>>>> that says what this pointer is? It seems if I pass the pointer to the 
>>>>>> base that the cell doesn't work right but if I ignore the pointer it 
>>>>>> does work right?
>>>>>> 
>>>>>> Thanks,
>>>>>> Michael McGlothlin
>>>>>> Sent from my iPhone
>>>>>> _______________________________________________
>>>>>> MonoTouch mailing list
>>>>>> MonoTouch@lists.ximian.com
>>>>>> http://lists.ximian.com/mailman/listinfo/monotouch
>>>> 
>>>> _______________________________________________
>>>> MonoTouch mailing list
>>>> MonoTouch@lists.ximian.com
>>>> http://lists.ximian.com/mailman/listinfo/monotouch
> 
_______________________________________________
MonoTouch mailing list
MonoTouch@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/monotouch

Reply via email to