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