为UIButton调用发件人的方法

时间:2015-07-26 00:52:03

标签: swift cocoa-touch uibutton segue sender

所以我的页面上有一堆按钮,并将它们分类为[UIButton]类型的数组,并调用buttonsArray。

当你点击其中一个按钮时,我的动作与goToFacts功能相关联,这与我的segue" goToFactSegue"并将WHICH按钮(发送者)的信息传递给我准备segue功能。我的prepareforSegue函数确认segue标识符是正确的,然后在DetailViewController页面上将变量索引设置为正确的数字。我计算索引的正确数字的方式(称为whichIndex)是通过匹配哪个索引(被点击的按钮)在buttonsArray中。我的问题是找到被点击的按钮的标题/名称(发件人)并将其设置为theButtonsName,这样我就可以在我的buttonsArray中搜索它并找到它的索引。

TL; DR如何像在UIImageView上使用.view一样拉出UIButton的名称

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "goToFactSegue" {
        // send info to next page
        if let whereToGo = segue.destinationViewController as? DetailViewController {
            let theButtonsName = sender!.******** as! UIButton
            if let whichIndex = find(buttonsArray, theButtonsName) {
            whereToGo.index = whichIndex 
            }}
    }
}

@IBAction func goToFacts(sender: UIButton) {
    performSegueWithIdentifier("goToFactSegue", sender: sender)
}

我已经搜索了xcode建议的所有可能性,没有任何与UIButton交互,阅读文档,他们所谈论的是.titleLabel,这是实际文本(并且不,.titleLabel没有&t工作) 还尝试了通常的嫌疑人(命名的变种......等)

2 个答案:

答案 0 :(得分:2)

我建议您通过对应用程序执行操作的非常简短的解释来标记按钮。您可以使用故事板进行操作,使用1,2,3,...,n等值标记每个按钮,然后您将获得您似乎正在寻找的索引。 UIButton有一个属性标记:

@IBAction func goToFacts(sender: UIButton) {
      performSegueWithIdentifier("goToFactSegue", sender: sender)
      whichIndex = sender.tag
}

所以,有发件人。

{% load i18n %}
{% load l10n %}
{% load humanize %}
{% load form_fields %}
....
<form id="login_form" class="reg-page" method="post" action="{% url 'django.contrib.auth.views.login' %}" >
    {% csrf_token %}
    <input type="hidden" name="next" value="{{ next }}" />
    {% if form.errors %}
        <div class="alert alert-danger alignCenter">
            <strong>
                {% trans "Incorrect username or password." %}
                <br />
                {% trans "Please try again." %}
            </strong>
        </div>
        <br />
    {% elif form.account_disabled_error %}
        <div class="alert alert-danger alignCenter">
            <strong>
                {% trans "Account Disabled." %}
                <br />
                {% trans "Contact Administrator." %}
            </strong>
        </div>
        <br />
    {% endif %}
    <div class="login-input">
        {% form_field form.username %}
    </div>
    <div class="login-input">
        {% form_field form.password %}
    </div>
    <div class="alignCenter">
        <input type="submit" class="btn-u btn-u-blue" value="{% trans 'Log In' %}" />
        <span class="hidden-xs">&nbsp;&nbsp;&nbsp;</span>
        <span class="visible-xs"><br /></span>
        <input type="button" class="btn btn-default" onClick="login_form.reset();resetLoginForm();" value="{% trans 'Reset' %}" />
        &nbsp;&nbsp;&nbsp;
        <input class="btn btn-default" type="button" value="{% trans 'Cancel' %}" data-dismiss="modal" />
    </div>
</form>

答案 1 :(得分:1)

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

    if segue.identifier == "goToFactSegue" {

       if let whereToGo = segue.destinationViewController as? DetailViewController {

         let button = sender as! UIButton
         let theButtonsName = button.titlelabel?.text


          if let whichIndex = find(buttonsArray, theButtonsName) {
             whereToGo.index = whichIndex 
          }
       }
    }
}