【发布时间】:2014-07-21 20:06:38
【问题描述】:
现在,我对我为尝试创建自定义视图而创建的这个 hacky 解决方法不太满意。它在另一个视图控制器中使用 initWithFrame 以编程方式初始化,因此我在代码中覆盖了它。这似乎不是初始化我的视图的正确方法,但我不确定还能做什么。
- (instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
self = [[[NSBundle mainBundle] loadNibNamed:@"OTGMarkerDetailView" owner:self options:nil] lastObject];
[self setFrame:frame];
}
return self;
}
如果没有 setFrame 方法,自定义视图似乎总是在窗口顶部创建,而不是在我使用 CGRectMake 指定的坐标处。
我在这里用视图控制器中的方法初始化视图。
- (BOOL)mapView:(GMSMapView *)mapView didTapMarker:(GMSMarker *)marker {
if (!self.detailView) {
self.detailView = [[OTGMarkerDetailView alloc] initWithFrame:CGRectMake(0, 568, 320, 55)];
}
[self.view addSubview:self.detailView];
self.detailView.backgroundColor = [UIColor whiteColor];
NSRange range = [self.startAddress rangeOfString:@","];
NSString *mainAddress = [self.startAddress substringToIndex:range.location];
NSString *subAddress = [self.startAddress substringFromIndex:range.location + 1];
[self.detailView setLabelsWithMainAddress:mainAddress subAddress:subAddress];
[UIView animateWithDuration:0.5 animations:^{
self.detailView.frame = CGRectMake(0, 513, 320, 55);
}];
return YES;
}
【问题讨论】:
标签: ios objective-c uiview xib nib