Why isn't initWithCoder initializing items correctly?

匿名 (未验证) 提交于 2019-12-03 01:47:02

问题:

I've got a subclass of UITableViewCell. My subclass contains several UILabels. I want my subclass to initialize these labels to some default settings that applies to every table view cell of mine.

I read that I should be using initWithCoder for this. My initWithCoder function is being called, and I can step through each line in my function and it appears to go through the motions. When I run my application I do not see any of the properties being applied, though. Most noticeably, the font is not being changed. I just don't think any of the properties that I'm modifying on my UILabels are actually being saved, or displayed.

I'm using this subclass in conjunction with a Storyboard. I know my changes will not be reflected on the Storyboard, but they're also not being reflected when the application runs - despite my code being executed.

Edit: I wanted to mention that prior to trying to override initWithCoder, I had an instance method in these subclasses that I'd run this logic in. I would just call that instance method inside of cellForRowAtIndexPath. This method was working, but I thought it'd be handy to have this logic in this subclass occur automatically.

Any ideas? My code is below:

#import "ThreadListCell.h"  @implementation ThreadListCell  - (id)initWithCoder:(NSCoder *)aDecoder {      if ((self = [super initWithCoder:aDecoder])) {          // adjust the font settings of the title         self.title.font = [UIFont fontWithName:@"SourceSansPro-Black" size:16];         self.title.textColor = [UIColor colorWithWhite:0.267f alpha:1.0f];          // adjust the font settings of the subtitle         self.text.font = [UIFont fontWithName:@"SourceSansPro-Light" size:14];         self.text.textColor = [UIColor colorWithWhite:0.267f alpha:0.9f];         self.text.textColor = [UIColor colorWithRed:1 green:0 blue:0 alpha:1];          // adjust the font settings of the location         self.location.font = [UIFont fontWithName:@"SourceSansPro-Light" size:8];         self.location.textColor = [UIColor colorWithWhite:0.267f alpha:0.9f];          // adjust the UILabel settings of the title         self.title.numberOfLines = 0;         self.title.lineBreakMode = UILineBreakModeTailTruncation;          // adjust the UILabel settings of the subtitle         self.text.numberOfLines = 0;         self.text.lineBreakMode = UILineBreakModeTailTruncation;          // adjust the UILabel settings of the location         self.location.numberOfLines = 0;         self.location.lineBreakMode = UILineBreakModeTailTruncation;         self.location.textAlignment = UITextAlignmentRight;      }      return self;  }  @end 

And the header:

#import   @interface ThreadListCell : UITableViewCell  @property (nonatomic, weak) IBOutlet UILabel *text; @property (nonatomic, weak) IBOutlet UILabel *title; @property (nonatomic, weak) IBOutlet UILabel *location;  @end 

回答1:

None of your IBOutlets is set when you get the message - you need to use "awakeFromNib" or "viewDidLoad" - something like that - to access your outlets. That said, you can set other non-outlet stuff in the initWithCoder.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!