我在重命名按钮时遇到问题。我有一些带有桌面视图的屏幕,我有一些项目,例如 - "首先","秒","第三",...我想当我点击某个项目让我在其他屏幕上,将在哪里按钮,它将根据我选择的项目更改文本。我的问题是,当我点击第一项时,例如"首先",Button有名字" Button"不是" first_detail"就像我在代码中所说的那样。我像这样添加了Button:
export class CategoryProductPage {
public base_url: string;
cartCount$: Observable<number>;
public allProduct: Array<any>;
category: string;
catId: string;
constructor(
public navCtrl: NavController,
public navParams: NavParams,
public productProvider: ProductsProvider,
private urlProvider: UrlProvider,
private cartProvider: CartItemsProvider
) {
this.catId = this.navParams.get('cid');
this.cartCount$ = this.cartProvider.cartCount;
this.base_url = this.urlProvider.getUrl();
if (this.catId) {
this.getAllProductByCategory(this.catId);
} else {
this.getAllProduct();
}
}
感谢您的建议。
答案 0 :(得分:1)
您可以像这样设置按钮标题
var buttonTitle: String {
didSet {
self.yourbutton.setTitle(buttonTitle, for: .normal)
}
}
您可以使用
self.buttonTitle = "First"
答案 1 :(得分:0)
在VC中为按钮创建一个插座,并设置按钮的标题而不是发件人
@IBOutlet weak var itemButton: UIButton!
并检查是否进入任何if条件
@IBAction func testBtn(_ sender: AnyObject) {
if names[myIndex] == "first" {
itemButton.setTitle("first_detail", for: UIControlState.normal)
self.performSegue(withIdentifier: "testSegue", sender: self)
}
if names[myIndex] == "second" {
itemButton.setTitle("second_detail", for: UIControlState.normal)
self.performSegue(withIdentifier: "secondSegue", sender: self)
}
}
答案 2 :(得分:0)
您的代码不起作用的原因是在单击按钮后触发了IBAction。代码无法在单击按钮之前神奇地读取用户的想法并更改文本。
创建一个名为&#39; buttonTitle&#39;或者在目标视图控制器上的类似内容。如果可以的话,我更愿意避免使用期权,所以这样的东西就是你想要的目标VC:
var buttonTitle = ""
如果你正在使用segue,那么你需要覆盖prepare(for:sender:)
并在segue的destination
视图控制器上设置buttonTitle属性(这将要求你施展{ {1}}作为目标视图控制器的子类)。像这个例子(我只是调用你的目的地VC的类MyDestinationVC。用正确的名称替换它):
destination
或者,如果您从代码中手动推送/呈现,那么在将其放在屏幕上之前,请设置相同的override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let destinationVC = segue.destination as? MyDestinationVC {
destinationVC.buttonTitle = names[myIndex]
}
}
属性。
然后,在目标视图控制器的buttonTitle
方法中,根据buttonTitle属性设置按钮的标题。
viewDidLoad()
注意:如果在override func viewDidLoad() {
super.viewDidLoad()
myButton.setTitle(buttonTitle, for: .normal)
}
之前调用,则自动更新按钮的其他解决方案将导致崩溃,因为他们正在访问的视图尚未初始化。
答案 3 :(得分:0)
我有这样的方式:
@IBOutlet weak var itemButton: UIButton!
在行动按钮中我只放
@IBAction func testBtn(_ sender:AnyObject){ 如果名称[myIndex] ==&#34;第一个&#34; { self.performSegue(withIdentifier:&#34; testSegue&#34;,sender:self) } 如果名称[myIndex] ==&#34; second&#34; { self.performSegue(withIdentifier:&#34; secondSegue&#34;,sender:self) } }
对第二个(目标)VC我设置了这些条件
如果名称[myIndex] ==&#34; first&#34; { itemButton.setTitle(&#34; first_detail&#34 ;, for:UIControlState.normal) } 如果名称[myIndex] ==&#34; second&#34; { itemButton.setTitle(&#34; second_detail&#34 ;, for:UIControlState.normal) }
它可以正常工作