ios - UILabel not updating when called from delegate method -
i'm using contact picker grab string, pass string view controller, uilabel not updating data (or other string).
in slingviewcontroller.m logs below, _taggedfriendsnames
being passed successfully.
perhaps issue because receiving view controller trying update label on (slingshotview
) view? don't think that's case i've been updating labels in way in other methods.
the answer related updating uilabels in general, i've had no luck after searching.
things i've checked no success:
- updating main thread asynchronously
@synthesize
label in slingshotview- calling
setdisplay
included potentially relevant code below. in advance tips!
slingviewcontroller.m
-(void)updatefriendspickedlabel:(id)sender { nslog(@"updatefriendspickedlabel: %@", _taggedfriendsnames); // see slingshotview.friendspickedlabel.text = @"any string"; // don't see }
slingviewcontroller.h
@class tbmultiselectcontroller; @class slingshotview; @interface slingviewcontroller : uiviewcontroller @property (nonatomic, readonly) slingshotview *slingshotview; @property(nonatomic) nsstring *taggedfriendsnames; //for friend picker -(void)updatefriendspickedlabel:(id)sender; @end
multiselectviewcontroller.m
- (ibaction) sendbutton: (id) sender { nsmutablestring *mystring = [[nsmutablestring alloc]initwithstring:@""]; (int i=0; < self.selectedcontacts.count; i++) { contact *mycontact = self.selectedcontacts[i]; [mystring appendstring:[nsstring stringwithformat:@"%@ %@ ", mycontact.firstname, mycontact.lastname]]; } slingviewcontroller *svc = [[slingviewcontroller alloc] init]; svc.taggedfriendsnames = mystring; [svc updatefriendspickedlabel:self]; [self.navigationcontroller dismissviewcontrolleranimated:yes completion:nil]; }
multiselectviewcontroller.h
@protocol tbmultiselectcontrollerdelegate; @class slingviewcontroller; @interface tbmultiselectcontroller : uiviewcontroller <uitableviewdatasource, uitableviewdelegate, uisearchdisplaydelegate, tbcontactsgrabberdelegate> @property (nonatomic, assign) id<tbmultiselectcontrollerdelegate> delegate; - (ibaction)sendbutton: (id) sender; @end @protocol tbmultiselectcontrollerdelegate <nsobject> -(void)updatefriendspickedlabel:(id)sender; @end
slingshotview.h
@property (strong, nonatomic) uilabel *friendspickedlabel;
slingshotview.m
@synthesize friendspickedlabel; ... - (id)initwithframe:(cgrect)frame { if ((self = [super initwithframe:frame])) { cgrect screenrect = [[uiscreen mainscreen] bounds]; cgrect imageframe = cgrectmake(0, 0, screenrect.size.width, screenrect.size.height); contentview = [[uiview alloc] initwithframe:frame]; [contentview setbackgroundcolor:[uicolor whitecolor]]; [contentview setautoresizingmask:uiviewautoresizingflexiblewidth|uiviewautoresizingflexibleheight]; [self addsubview:contentview]; self.friendspickedlabel = [[uilabel alloc] initwithframe:cgrectmake(10, screenrect.size.height/2-100, screenrect.size.width-20, 200)]; self.friendspickedlabel.shadowcolor = [uicolor darkgraycolor]; self.friendspickedlabel.numberoflines = 0; self.friendspickedlabel.shadowoffset = cgsizemake(0.5, 0.5); self.friendspickedlabel.backgroundcolor = [[uicolor blackcolor] colorwithalphacomponent:0.0]; [self.friendspickedlabel settextalignment:nstextalignmentleft]; self.friendspickedlabel.textcolor = [uicolor whitecolor]; self.friendspickedlabel.font = [uifont fontwithname:@"helveticaneue-bold" size:24]; [contentview addsubview:self.friendspickedlabel];
you reallocating this..
slingviewcontroller *svc = [[slingviewcontroller alloc] init]; svc.taggedfriendsnames = mystring; [svc updatefriendspickedlabel:self];
meaning slingshotview.friendspickedlabel
becomes nil..
and calling/using delegate wrong way, think suppose
[self.delegate updatefriendspickedlabel:@"yourdata passed"];
from code using -(void)updatefriendspickedlabel:(id)sender;
inside slingviewcontroller
, not delegate, not implementing delegate either..
yes -(void)updatefriendspickedlabel:(id)sender;
method called, bacause calling directly class..
slingviewcontroller.h
@interface slingviewcontroller : uiviewcontroller < tbmultiselectcontrollerdelegate > // delegate implementation @property (nonatomic, readonly) slingshotview *slingshotview; @property(nonatomic) nsstring *taggedfriendsnames; //for friend picker //-(void)updatefriendspickedlabel:(id)sender; @end
multiselectviewcontroller.m
- (ibaction) sendbutton: (id) sender { nsmutablestring *mystring = [[nsmutablestring alloc]initwithstring:@""]; (int i=0; < self.selectedcontacts.count; i++) { contact *mycontact = self.selectedcontacts[i]; [mystring appendstring:[nsstring stringwithformat:@"%@ %@ ", mycontact.firstname, mycontact.lastname]]; } /* slingviewcontroller *svc = [[slingviewcontroller alloc] init]; svc.taggedfriendsnames = mystring; [svc updatefriendspickedlabel:self]; */ [self.delegate updatefriendspickedlabel:@"yourstring"]; // call method in implementation class [self.navigationcontroller dismissviewcontrolleranimated:yes completion:nil]; }
hmm.. think have implemented delegates wrong way.
this suppose comment long..
Comments
Post a Comment