我一直在使用IBOutletCollections將相同的行爲應用於IB中所連接的許多對象。這是一個很好的節省時間的方法,但是在IB中的每個對象與我的頭文件中聲明的IBOutletCollection之間單獨建立連接仍然需要很長時間。IBOutletCollection - 同時連接多個對象
我試着在IB中突出顯示多個接口對象,並將連接拖到IBOutletCollection,但即使如此,它仍然只能一次掛鉤它們。是否有一種隱藏的方式來同時連接多個?
謝謝
我一直在使用IBOutletCollections將相同的行爲應用於IB中所連接的許多對象。這是一個很好的節省時間的方法,但是在IB中的每個對象與我的頭文件中聲明的IBOutletCollection之間單獨建立連接仍然需要很長時間。IBOutletCollection - 同時連接多個對象
我試着在IB中突出顯示多個接口對象,並將連接拖到IBOutletCollection,但即使如此,它仍然只能一次掛鉤它們。是否有一種隱藏的方式來同時連接多個?
謝謝
是啊......它比你想象的要難。我建議在bugreporter.apple.com上使用雷達。
在我的代碼中,我偶爾會採取這樣的代碼。當我決定更改所有按鈕的字體或背景顏色或其他內容時,它可以節省大量時間,麻煩和錯誤。它與代碼的一致性給出了IB的佈局優勢。
// We have a lot of buttons that point to the same thing. It's a pain to wire
// them all in IB. Just find them all and write them up
- (void)wireButtons
{
for (UIView *view in [self.view subviews])
{
if ([view isKindOfClass:[UIButton class]])
{
UIButton *button = (UIButton *)view;
[button setTitle:[self buttonTitleForTag:button.tag] forState:UIControlStateNormal];
button.titleLabel.lineBreakMode = UILineBreakModeWordWrap;
button.titleLabel.textAlignment = UITextAlignmentCenter;
if (![button actionsForTarget:self forControlEvent:UIControlEventTouchUpInside])
{
[button addTarget:self action:@selector(performSomething:) forControlEvents:UIControlEventTouchUpInside];
}
}
}
}
我使用了類似的技術,當我需要遞歸地收集所有的控件(我用這個酥料餅直通看法,但它也可用於大規模禁用):
- (NSArray *)controlViewsForView:(UIView *)aView
{
if (!aView)
{
return nil;
}
NSMutableArray *controlViews = [NSMutableArray new];
for (UIView *subview in aView.subviews)
{
if ([subview isKindOfClass:[UIControl class]] && ! [self viewIsEffectivelyHidden:subview])
{
[controlViews addObject:subview];
}
[controlViews addObjectsFromArray:[self controlViewsForView:subview]];
}
return controlViews;
}
- (BOOL)viewIsEffectivelyHidden:(UIView *)view
{
if (! view)
{
return NO;
}
if ([view isHidden])
{
return YES;
}
return [self viewIsEffectivelyHidden:[view superview]];
}
謝謝。我已經向蘋果提交了錯誤報告。 – beev 2012-02-17 14:00:42
我在這裏同樣的問題。這個問題很古老。蘋果在此期間提出瞭解決方案嗎?否則,我看不到收藏的努力。我可以(在我的情況下)使用父視圖並使用子視圖選擇器。 – redestructa 2014-09-03 13:36:21