在我的ViewController
中,我有12个自定义UIViews
(名为CardView)。
我正在尝试以编程方式遍历ViewController
的子视图,以找到自定义视图(CardView)并进行一些配置。以下是我计算CardViews数量的代码。
private func cardCount()->Int{
var count = 0
for subview in self.view.subviews{
if subview is CardView{
count = count + 1
}
}
return count
}
但是,它返回的是我的“ 0”,原因是我的视图已嵌入UIStackViews
中。我在一个垂直对齐的like-
如何以编程方式获取CardViews。任何帮助,将不胜感激。
答案 0 :(得分:2)
您可以先做一些平面地图来展平您的视图结构,然后对其进行计数:
private func cardCount()->Int{
var count = 0
for subview in self.view.subviews.flatMap { $0.subviews }.flatMap { $0.subviews }{
if subview is CardView{
count = count + 1
}
}
return count
}
但是我觉得您的做法是错误的。卡的数量听起来像模型中的东西。您应该有一个名为cardCount
的变量,并且屏幕上的卡片应该根据该变量而变化,而不是相反。
答案 1 :(得分:0)
您可以为每个水平堆栈视图创建IBOutlet。然后遍历stackviews中的子视图。
@IBOutlet weak var StackView1: UIStackView!
@IBOutlet weak var StackView2: UIStackView!
@IBOutlet weak var StackView3: UIStackView!
for customView in StackView1.arrangedSubviews
{
// Do task
}
答案 2 :(得分:0)
尝试一下
private func cardCount() -> Int
{
var count = 0
for subview in self.view.subviews
{
if let stackView: UIStackView = subview as? UIStackView
{
let arrangedViews = stackView.arrangedSubviews
for cardView in arrangedViews
{
if cardView is CardView
{
count = count + 1
}
}
}
}
return count
}
答案 3 :(得分:0)
从您共享的图片图中,似乎StackView是第一个孩子。每当您获得子视图时,仅返回第一个子视图。因此self.view.subviews
将只产生一个UIStackView
。给每个堆栈视图添加一个标签。然后,在代码中:
private func cardCount()->Int{
var count = 0
for subview in self.view.subviews{
if subview.tag == 10 { // parent stack view
for subviewStack in subview { // Get subviews of parent stackview
if subviewStack.tag == 11 { // First stack view child
for subViewSubStack in subviewStack.subviews { // Get card views in this stack view
// Apply your count logic
}
}
}
}
}
return count
}
我只写了第一个条件。您可以添加其他人。
话虽如此,我不会说这是最佳的解决方案。这可以并且应该重构。
答案 4 :(得分:0)
创建这样的扩展方法。它将计算视图控制器中的所有CardView实例。
var data = {
name: name,
state: state,
city: city,
add: add,
phone: phone
};
var stringData = JSON.stringify(data);
$.ajax({
type: "POST",
url: "Customer.aspx/insertion",
data: stringData,
// data: '{name:"' + name + '", state:"' + state + '",city:"' + city + '",add:"'+add+'"phone:"' +phone+'" }',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: OnSucces,
error: OnError
});
function OnSucces(response) {
// alert("Hello");
if (response == true) {
alert('Category Added Successfully !!!');
reset();
} else {
alert(response);
}
}
function OnError(response) {
alert(response);
}
});
并在extension UIView {
func cardCount() -> Int {
switch self {
case let self as CardView:
return 1
case let self as UIStackView:
return self.arrangedSubviews.reduce(0, { $0 + $1.cardCount() })
default:
return self.subviews.reduce(0, { $0 + $1.cardCount() })
}
}
}
viewDidLoad