如何创建自定义uiview,该按钮可以在uiview中点击?
问题描述:
我试图创建点击的滚动视图按钮像这样(在底部): 如何创建自定义uiview,该按钮可以在uiview中点击?
这是到目前为止我的代码:
scView = UIScrollView(frame: CGRect(x: 0, y: view.frame.maxY-110, width: view.bounds.width, height: 110))
self.view.addSubview(scView)
scView.backgroundColor = UIColor.lightGray
scView.translatesAutoresizingMaskIntoConstraints = false
for i in 0 ... 10 {
let myNewView=UIView(frame: CGRect(x: xOffset, y: CGFloat(buttonPadding), width: 200, height: 100))
myNewView.backgroundColor=UIColor.white
myNewView.layer.cornerRadius=10
self.scView.addSubview(myNewView)
let label = UILabel(frame: CGRect(x: xOffset, y: CGFloat(buttonPadding)+5, width: 150, height: 10))
label.center = CGPoint(x: 160, y: 285)
label.textAlignment = .left
label.text = "I'am a title label"
label.textColor = .black
myNewView.addSubview(label)
let ditancelabel = UILabel(frame: CGRect(x: xOffset, y: CGFloat(buttonPadding)+5, width: 50, height: 10))
ditancelabel.center = CGPoint(x: 160, y: 285)
ditancelabel.textAlignment = .right
ditancelabel.text = "0.04 km"
ditancelabel.textColor = .red
myNewView.addSubview(ditancelabel)
let textView = UITextView(frame: CGRect(x: xOffset, y: CGFloat(buttonPadding)+15, width: 200.0, height: 40.0))
self.automaticallyAdjustsScrollViewInsets = false
textView.center = self.view.center
textView.textAlignment = NSTextAlignment.justified
textView.textColor = UIColor.lightGray
textView.backgroundColor = UIColor.clear
myNewView.addSubview(textView)
let button = UIButton()
button.tag = i
button.backgroundColor = UIColor.white
button.setTitle("\(i)", for: .normal)
button.setTitleColor(.black, for: .normal)
button.backgroundColor = UIColor.clear
button.addTarget(self, action:#selector(handleRegister(sender:)), for: .touchUpInside)
button.frame = CGRect(x: xOffset, y: CGFloat(buttonPadding), width: 200, height: 100)
xOffset = xOffset + CGFloat(buttonPadding) + button.frame.size.width
myNewView.addSubview(button)
}
scView.contentSize = CGSize(width: xOffset, height: scView.frame.height)
第一按钮可以被点击,但另一个不能被点击。并没有出现2个UILabels和1个UITextView。
handleRegister
方法是获取发件人标签并将其打印为日志,以了解该按钮是否可以点击。
如何修复代码,使其可以像上图中的自定义UIView?
我需要通过单击按钮将标签和文本视图文本转移到另一个视图控制器,该视图控制器通过handleRegister
中的seque处理。
答
1)你看不到,因为你的容器视图大小的标签和其他控制(200,100)
let myNewView=UIView(frame: CGRect(x: xOffset, y: CGFloat(buttonPadding), width: 200, height: 100))
和你设置的控制中心。
label.center = CGPoint(x: 160, y: 285)
ditancelabel.center = CGPoint(x: 160, y: 285)
此中心点在容器视图中不可见。这就是为什么你看不到标签。 只需注释这些行即可设置标签的中心,您可以完美地看到这些标签。
2)我需要通过按钮点击传递标签和textview文本到另一个viewcontroller,通过handleRegister中的seque处理。
我希望你有一个数组,在其中存储数据以显示在你的自定义视图中,只需从基于按钮标签的数组中找到该对象,并将该对象传递给另一个控件。
3)第一个按钮可以被点击,但另一个不能被点击。
再次问题与标签相同。您设置了按钮的框架是这样
button.frame = CGRect(x: xOffset, y: CGFloat(buttonPadding), width: 200, height: 100)
,并增加X偏移通过此行来创建另一个视图
xOffset = xOffset + CGFloat(buttonPadding) + button.frame.size.width
X偏移每次增加与按钮的大小。因此,如果在打印X偏移值,它实际上打印像(假设X偏移= 10的初始值,填充= 0)
for i in 0 ... 10 {
print(xOffset)
..... your other code
}
输出:会像 10,210,410,610 .... ..因为这个,你的按钮与容器视图不在一起,因此你不能点击它。
我已经更新了你的代码,检查以下
scView = UIScrollView(frame: CGRect(x: 0, y: view.frame.maxY-110, width: view.bounds.width, height: 110))
self.view.addSubview(scView)
scView.backgroundColor = UIColor.lightGray
scView.translatesAutoresizingMaskIntoConstraints = false
for i in 0 ... 10 {
let myNewView=UIView(frame: CGRect(x: xOffset, y: CGFloat(buttonPadding), width: 200, height: 100))
myNewView.backgroundColor=UIColor.white
myNewView.layer.cornerRadius=10
self.scView.addSubview(myNewView)
let subVwOffset = 5
let label = UILabel(frame: CGRect(x: subVwOffset, y: CGFloat(buttonPadding)+5, width: 150, height: 10))
label.textAlignment = .left
label.text = "I'am a title label"
label.textColor = .black
myNewView.addSubview(label)
let ditancelabel = UILabel(frame: CGRect(x: subVwOffset, y: CGFloat(buttonPadding)+5, width: 50, height: 10))
ditancelabel.textAlignment = .right
ditancelabel.text = "0.04 km"
ditancelabel.textColor = .red
myNewView.addSubview(ditancelabel)
let textView = UITextView(frame: CGRect(x: subVwOffset, y: CGFloat(buttonPadding)+15, width: 200.0, height: 40.0))
self.automaticallyAdjustsScrollViewInsets = false
textView.center = self.view.center
textView.textAlignment = NSTextAlignment.justified
textView.textColor = UIColor.lightGray
textView.backgroundColor = UIColor.clear
myNewView.addSubview(textView)
let button = UIButton()
button.tag = i
button.backgroundColor = UIColor.white
button.setTitle("\(i)", for: .normal)
button.setTitleColor(.black, for: .normal)
button.backgroundColor = UIColor.clear
button.addTarget(self, action:#selector(handleRegister(sender:)), for: .touchUpInside)
button.frame = CGRect(x: subVwOffset, y: CGFloat(buttonPadding), width: 200, height: 100)
xOffset = xOffset + CGFloat(buttonPadding) + button.frame.size.width
myNewView.addSubview(button)
}
scView.contentSize = CGSize(width: xOffset, height: scView.frame.height)
我们,如果你发现任何其他困难我知道。
1.我看到问题。中心。 – Sarimin
但如何使所有的循环按钮可以点击? – Sarimin
@Sarimin检查我的答案,我已经更新了我的答案。 – Surjeet