将Xcode添加到storyboard后更改对象类

时间:2016-08-24 16:36:20

标签: ios swift xcode storyboard

我已经为视图控制器添加了多个元素,并为它们添加了复杂的约束。但现在我想从UIImageView更改为UIButton。

在故事板中更改课程是否可行?

我知道身份检查器中的类属性,但是没有更改元素。

我真的不想再次制定约束,但如果没有其他办法,我将不得不这样做。

4 个答案:

答案 0 :(得分:2)

我认为不可能替换视图。但还有另一种解决方案。

保持UIImageView不变,透明,并将其用作容器,将UIButton作为子视图添加到其中,并添加约束以使按钮填满整个图像视图。

让您的图片视图具有透明背景,并且不要忘记将func draw(start: CGPoint, end: CGPoint){ UIGraphicsBeginImageContext(self.subImageView.frame.size) let context = UIGraphicsGetCurrentContext() subImageView?.image?.drawInRect(CGRect(x: 0, y: 0, width: subImageView.frame.width, height: subImageView.frame.height)) CGContextSetLineWidth(context, 6) CGContextBeginPath(context) CGContextMoveToPoint(context, start.x, start.y) CGContextAddLineToPoint(context, end.x, end.y) CGContextSetStrokeColorWithColor(context, UIColor.redColor().CGColor) CGContextStrokePath(context) let newImage = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() subImageView.image = newImage } 设置为userInteractionsEnabled

与添加UITapGestureRecognizer相比,使用此方法,您将拥有一个包含所有功能的实际按钮。

答案 1 :(得分:2)

它不可行,更好的方法:为UIImage添加一个轻击手势,我建议将来使用堆栈视图和"添加缺失的约束",用此你不会有很多麻烦在将来改变它

答案 2 :(得分:0)

感谢每一个人,

我不喜欢懒惰和添加更多元素的想法因为,所以我决定使用以下方法,它对我来说非常有用:

  1. 将我需要的所有按钮添加到视图中,没有任何内容。只需将它们调整到合适的大小。
  2. 稍微向上移动每个图像,以便按钮有空间。
  3. 将每个按钮定位在图像的位置。
  4. 已经出现在我面前的约束,所以这只是“复制和粘贴”的问题(我的意思是很容易正确设置它们)。
  5. P.S。这个容器里有几十个约束,相对来说它花了很短的时间,我希望不会再犯这个错误,但最终可能会犯这个错误。对我来说,添加元素(识别器或顶部的其他按钮)和随附的代码

    要好得多 每个人都是10倍。

答案 3 :(得分:0)

您可以编辑基础XML。要做到这一点:

  1. 确保您已在版本控制下备份当前故事板,或只是制作副本
  2. 将您想要的新项目拖到视觉故事板上
  3. 打开故事板作为源代码(右键单击故事板以打开为>源代码
  4. 然后您将看到约束列出如下:

    <constraints>
        <constraint firstItem="NBy-b0-qdt" firstAttribute="centerX" secondItem="8bC-Xf-vdC" secondAttribute="centerX" id="JOl-XX-NS8"/>
        <constraint firstItem="NBy-b0-qdt" firstAttribute="centerY" secondItem="8bC-Xf-vdC" secondAttribute="centerY" id="mFA-R7-Xir"/>
    </constraints>
    

    firstItemsecondItem与对象的ID相关,因此您需要做的就是为{id}移出firstItem(或secondItem)id新对象。

    注意:您的对象将位于subviews标记内,并且看起来像这样:

    <textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" misplaced="YES" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="NBy-b0-qdt">
    
    1. 在每个相关约束中更改firstItem(或secondItem)值以对应新对象的正确ID后,旧项目的xml可以完全删除
    2. 您现在需要右键单击故事板并打开为&gt;界面生成器 - 故事板
    3. 现在确保使用正确的类
    4. 更新情节提要和视图控制器代码之间的所有链接