gpt4 book ai didi

iphone - IBOutletCollection - 一次连接多个对象

转载 作者:行者123 更新时间:2023-12-03 19:56:58 24 4
gpt4 key购买 nike

我一直在使用 IBOutletCollections 将相同的行为应用于 IB 中连接的许多对象。这非常节省时间,但是单独建立 IB 中的每个对象和我的头文件中声明的 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];
}
}
}
}

当我需要递归收集所有控件时,我使用类似的技术(我将其用于弹出窗口直通 View ,但它对于批量禁用也很有用):

- (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]];
}

关于iphone - IBOutletCollection - 一次连接多个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9313379/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com