如何从UIScrollview中删除所有子视图?
我正在使用带有Apple的故事板的iAd套件,根据此链接... Apple iAd Storyboard文档
一切正常,直到我打开autolayout.它构建良好,但在运行时崩溃.我得到的输出是:
2013-08-24 12:06:36.138 TabbedBanner [7272:c07] *断言失败 - [UIView layoutSublayersOfLayer:],/ SourceCache/UIKit_Sim/UIKit-2380.17/UIView.m:578 2013-08-24 12:06: 36.139 TabbedBanner [7272:c07]*由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'将-viewDidLayoutSubviews发送到视图控制器后仍需要自动布局.BannerViewController的实现需要将-layoutSubviews发送到视图以调用自动布局.***第一掷调用堆栈:(0x1e27012 0x110ee7e 0x1e26e78 0xba4665 0xa347a 0x11226b0 0x1358fc0 0x134d33c 0x1358eaf 0x1422bd 0x8ab56 0x8966f 0x89589 0x887e4 0x883ef 0x65c9d 0x5098b 0x5194b 0x62cb5 0x63beb 0x55698 0x1700df9 0x1700ad0 0x1d9cbf5 0x1d9c962 0x1dcdbb6 0x1dccf44 0x1dcce1b 0x5117a 0x52ffc 0x2a0d 0x2935)的libc ++ abi.dylib:终止叫抛出异常(lldb)
我知道这与故事板中的子视图有关,但我不知道如何纠正这个错误.我是iOS的新手,并试图自学,所以任何帮助表示赞赏.非常感谢
我有几个用户应该能够拖放的UIViews.我使用UIPanGestureRecognizer来管理d&d操作(参见下面的代码).d&d动作工作正常,但当我开始拖动另一个UIView时,我刚刚放弃的那个跳回原来的位置.
- (void)handlePan:(UIPanGestureRecognizer *)recognizer {
CGPoint translation = [recognizer translationInView:self.view];
switch (recognizer.state) {
case UIGestureRecognizerStateBegan:
for (UIView* checkView in dragAndDropImageViewsArray) {
if (checkView == recognizer.view) {
[checkView.superview bringSubviewToFront:checkView]; //this is done to make sure the currently dragged object is the top one
}
}
break;
case UIGestureRecognizerStateChanged:
recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x, recognizer.view.center.y + translation.y);
break;
case UIGestureRecognizerStateEnded:
NSLog(@"UIGestureRecognizerStateEnded");
break;
default:
break;
}
[recognizer setTranslation:CGPointMake(0, 0) inView:self.view];
}
Run Code Online (Sandbox Code Playgroud)
我尝试了几个"解决"问题但引起其他问题的事情:
我开始加深对Auto Layout的理解,但是在我看来,我正在寻找的东西应该非常简单; 我看到很多方法都涉及执行"重新自动布局",但我不清楚如何使用它们.
这里有简单的解决方案吗?比如调用一个覆盖IB Auto-Layout约束的方法并根据UIView的新位置重新定义它们? …
问候所有,
我是一个菜鸟,我一直在努力解决这个问题.
我通过UItouch将图像添加到视图中.视图包含一个背景,顶部将添加新图像.如何清除我从子视图添加的图像,而不删除作为背景的UIImage.非常感谢任何帮助.提前致谢.
这是代码:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *) event {
NSUInteger numTaps = [[touches anyObject] tapCount];
if (numTaps==2) {
imageCounter.text =@"two taps registered";
//__ remove images
UIView* subview;
while ((subview = [[self.view subviews] lastObject]) != nil)
[subview removeFromSuperview];
return;
}else {
UITouch *touch = [touches anyObject];
CGPoint touchPoint = [touch locationInView:self.view];
CGRect myImageRect = CGRectMake((touchPoint.x -40), (touchPoint.y -45), 80.0f, 90.0f);
UIImageView *myImage = [[UIImageView alloc] initWithFrame:myImageRect];
[myImage setImage:[UIImage imageNamed:@"pg6_dog_button.png"]];
myImage.opaque = YES; // explicitly opaque for performance
[self.view addSubview:myImage]; …Run Code Online (Sandbox Code Playgroud) 我想在UITableViewCell点击它时使用默认突出显示.但是,我不希望自定义子视图(及其子视图)接收消息以更新其突出显示的状态,从而破坏backgroundColor属性.
编辑
"子视图"我指的是任何子UIView类,而不仅仅是UITableViewCells.
也许这种假设的情况会更好地表达我正在寻找的东西:我有一个UITableViewCell.叫它c.然后我添加一个UIView(称之为v)作为c的子视图.当我点击c时,我想要c突出显示(标准蓝色背景,白色字体颜色),但我不希望v突出显示.我该如何实现这一目标?
在我的应用程序中,我正在尝试将子视图添加到前面,然后将其放回到其原始图层位置.代码应该非常简单:
要将子视图放在前面(在我的自定义UIView类中):
[self.superview bringSubviewToFront:self];
Run Code Online (Sandbox Code Playgroud)
简单.我将原始z位置存储在一个名为的实例变量中,你猜对了zPosition.所以,前面的行-bringSubviewToFront:是:
zPosition = [self.superview.subviews indexOfObject:self];
Run Code Online (Sandbox Code Playgroud)
所以,我用来将子视图放在前面的所有代码都是:
zPosition = [self.superview.subviews indexOfObject:self];
[self.superview bringSubviewToFront:self];
Run Code Online (Sandbox Code Playgroud)
这应该是正常的.问题是当我尝试将子视图放回原位时.我只是这样做:
[self.superview exchangeSubviewAtIndex:zPosition withSubviewAtIndex:
[self.superview.subviews indexOfObject:self]];
Run Code Online (Sandbox Code Playgroud)
使用此代码,如果我有两个子视图,则会发生以下情况:
假设我有视图A和视图B.视图A在视图B上方.我点击视图B,它来到前面.我再次点击视图B(它应该回到原来的位置),没有任何反应,所以它现在在视图A上.如果我现在点击视图A,它会到达前面,但是当我再次点击它时(所以它应该回到原来的z位置:在视图B)下面,它的所有兄弟视图都消失了!
有谁看到可能导致这个问题的原因?
我需要一种方法来将所有内容都UILabel放在一个内部,UIView而无需通过内部的所有视图UIView.
我还有很多其他类型的观点,UIButtons UIImageView和s,当我只需要UILabels 时,它会花费很长时间来浏览所有这些观点.
我试图避免这样的事情:
for (UIView *view in myView.subviews)
{
if([view isKindOfClass:[UILabel class]])
{
UILabel *lbl = (UILabel*)view;
}
}
Run Code Online (Sandbox Code Playgroud)
是可能还是我在做梦?
在我的应用程序中,我正在向视图添加标签,然后我尝试在单击按钮时从视图中清除特定标签,并在尝试检索子视图时遇到错误:
class FirstViewController: UIViewController {
@IBAction func btnAddTask_Click(sender: UIButton){
var subViews = self.subviews.copy()
}
}
Run Code Online (Sandbox Code Playgroud)
我收到错误:
'FirstViewController'没有名为'subviews'的成员
如何获取当前视图的子视图?
我有一些可重复使用的HTML片段,我想在许多web2py视图中"包含".
使用具有LOAD的组件意味着必须编写需要加载其自己的数据的单独的控制器功能.
有办法:
我正在尝试删除我添加到视图中的所有子视图,因此我实现了一个循环来迭代子视图,其中包含以下内容:
for subview in view.subviews {
println(subview)
//subview.removeFromSuperview()
}
Run Code Online (Sandbox Code Playgroud)
我通过在我的视图中添加UILabel来测试它,然后运行此代码.输出包含我的UILabel,但也包含_UILayoutGuide.所以,我的问题是我如何确定子视图是我添加的还是系统添加的子视图?