Swift - 在单击按钮之前无法重命名按钮

时间:2018-04-25 06:49:31

标签: ios swift xcode uibutton rename

我在重命名按钮时遇到问题。我有一些带有桌面视图的屏幕,我有一些项目,例如 - "首先","秒","第三",...我想当我点击某个项目让我在其他屏幕上,将在哪里按钮,它将根据我选择的项目更改文本。我的问题是,当我点击第一项时,例如"首先",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();
    }
  }

感谢您的建议。

4 个答案:

答案 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)

我有这样的方式:

  1. 我定义@IBOutlet weak var itemButton: UIButton!
  2. 在行动按钮中我只放

    @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)     } }

  3. 对第二个(目标)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) }

  4. 它可以正常工作