【发布时间】:2017-01-12 00:38:25
【问题描述】:
请允许我先说我在堆栈溢出时研究了与此类似的不同问题(而且我是 iOS/Swift 的新手),他们确实提供了帮助。不过,我现在的问题如下,其实是2。
第一个问题是是否可以在 viewDidLoad 方法中嵌套函数?当我将它作为 func createButton 进行尝试时,它甚至没有显示两个不同的新按钮,实际上除了我通过情节提要添加的单一图像之外,它什么也没有显示。
第二个问题是引用图像的正确方法是什么,因为当我尝试运行我的代码时,我看到创建了两个仅具有蓝色背景的按钮。对此的扩展是“操作:”按钮创建部分的正确语法是什么,因为我不知道引用您自己的函数的有效方法是什么。
代码如下:
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
var imageNames : [String] = ["dino2Button", "dino3Button"]
var yposition : Int = 133
let xposition : Int = 112
let width : Int = 150
let height : Int = 113
//func createButton() {
for index in 0...1 {
print("index is: \(index)")
let image = UIImage(named: imageNames[index]) as UIImage?
let button = UIButton(type: .roundedRect) as UIButton
button.frame = CGRect(x: xposition, y: (yposition+10), width: width, height: height)
yposition += height + 10;
button.setImage(image, for: .normal)
button.addTarget(self, action: "", for: .touchUpInside)
self.view.addSubview(button)
}
//}
}
再一次,我总共做了两天的 iOS。
【问题讨论】:
-
这里有几个问题。首先,也许是最重要的 - 如果您刚刚学习 iOS 和 Swift 两天(而且您做得很好),请考虑现在花时间学习自动布局而不是框架。不同的设备有不同的框架尺寸,自动布局非常值得。其次,您看到空白/蓝色图像的原因是您的 UIImage 为零。检查拼写,包括大小写。此外,唯一没有文件扩展名的 UIImage(named:) 是 PNG(也区分大小写)。如果是.jpg,则需要添加“.jpg”。
-
第三,addTarget 中的动作是 Selector 类型 - 所以语法上 make 是 #selector(myFunc) 并添加一个简单的 func 来执行类似 print("got here ") 以确保连接正确。祝你好运!
-
@dfd 感谢您的帮助。显然我的问题是它应该是 button.setBackgroundImage 而不是 .setImage;尽管它们的类型可能是 .jpg 而不是 .png (我想我还没有检查过)。我一定会研究自动布局。另外,一个快速的附带问题,在为 iOS 开发时,故事板更常用于布局,还是故事板和代码的平衡组合?干杯!
-
我的观点——而且唯一的——是它取决于编码器。 Apple 在设计时工具(如用于自动布局的 InterfaceBuilder)方面做得非常好,但是,就像几乎任何事情一样,理解它(有时知道如何在需要时深入代码)会大有帮助。无论哪种方式,如果您特别在 iOS 上使用框架(许多遗留编码器仍然使用),您很快就会遇到需要回答 Apple 引入新设备尺寸时会发生什么 - 就在今天,我听到了关于10.5 英寸 iPad。您希望您的 iOS 布局能够在所有尺寸上无缝工作。