That attribute seems to be exactly what I needed. I hadn’t considered the need 
to export it and didn’t see it suggested anywhere. I seem to not need to 
include the constructor for the pointer if I have this constructor and it 
appears the default reuseIdentifier is the same thing I was manually assigning 
- the FullName of the cell type.

So I can drop all that and this simple class does the trick:


>  public class SubtitleTableViewCell : UITableViewCell {
>   [Export ( "initWithStyle:reuseIdentifier:" )]
>   private SubtitleTableViewCell ( UITableViewCellStyle style, NSString 
> reuseIdentifier ) : base ( UITableViewCellStyle.Subtitle, reuseIdentifier ) {}
>  }




> On 2015 01 19, at 05:22, Rolf Bjarne Kvinge <[email protected] 
> <mailto:[email protected]>> wrote:
> 
> Hi,
> 
> You don't have the initWithStyle:reuseIdentifier: constructor, try adding 
> this:
> 
>     [Export ("initWithStyle:reuseIdentifier:")]
>     public UITableViewCell (UITableViewCellStyle style, NSString 
> reuseIdentifier) : base (style, reuseIdentifier)
>     {
>     }
> 
> to your class and see if it's called.
> 
> Rolf       
> 
> On Fri, Jan 16, 2015 at 6:56 PM, Michael McGlothlin 
> <[email protected] <mailto:[email protected]>> wrote:
> 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 <[email protected] 
> <mailto:[email protected]>> wrote:
> 
>> 
>> 
>> On Wed, Jan 14, 2015 at 8:21 PM, Michael McGlothlin 
>> <[email protected] <mailto:[email protected]>> 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 <[email protected] 
>> <mailto:[email protected]>> 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 
>> <[email protected] <mailto:[email protected]>> 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 <[email protected] 
>> <mailto:[email protected]>> 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 
>>> <[email protected] <mailto:[email protected]>> 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
>>> [email protected] <mailto:[email protected]>
>>> http://lists.ximian.com/mailman/listinfo/monotouch 
>>> <http://lists.ximian.com/mailman/listinfo/monotouch>
>>> 
>> 
>> _______________________________________________
>> MonoTouch mailing list
>> [email protected] <mailto:[email protected]>
>> http://lists.ximian.com/mailman/listinfo/monotouch 
>> <http://lists.ximian.com/mailman/listinfo/monotouch>
>> 
>> 
>> 
>> 
> 

_______________________________________________
MonoTouch mailing list
[email protected]
http://lists.ximian.com/mailman/listinfo/monotouch

Reply via email to