-1

我在我的 iPhone 应用程序中的地图视图页面的注释标记中添加了一个按钮

UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
[rightButton addTarget:self
                action:@selector(go_to_detail_page:)    
      forControlEvents:UIControlEventTouchUpInside];
annView.rightCalloutAccessoryView = rightButton; 

我的接收功能是

-(IBAction)go_to_detail_page:(id)sender;{
}

我的问题如下。我在我的页面上创建了很多标记,我想在按下特定的注释视图按钮时传递一个唯一标识符,即使是一个字符串也可以。go_to_detail_page按下注释后,如何将字符串传递给方法?

4

4 回答 4

1

使用rightButton.tag = 1 并在

-(IBAction)go_to_detail_page:(id)sender{
    UIButton *button = (UIButton *)sender;
    if(button.tag==1){//this is the rightButton
         //your logic goes here

    }
}
于 2012-12-31T11:30:10.347 回答
0

在我看来,你可以有两种选择。

第一个选项是分配给每个按钮 atag然后在其操作中检索它。因此,例如,您将为每个按钮分配一个不同的标签。

rightButton.tag = // a tag of integer type

然后你会像这样使用

- (void)goToDetailedPage:(id)sender
{
    UIButton *senderButton = (UIButton *)sender;

    int row = senderButton.tag;        
    // do what you want with the tag
}

另一种选择是使用关联引用。通过它们,无需子类UIButton化,您只需创建一个属性(类型NSString)并将其用作标识符。

要使用它们,请查看Subclass UIButton to add a property

这是一个相当复杂的概念,但通过它你有很大的灵活性。

笔记

您不需要使用 IBAction。取而代之的是 void。IBAction 或 IBOutlet 旨在与 IB(Interface Builder)一起使用。它们只是占位符。在引擎盖下,它们意味着无效。

使用驼峰式表示法。例如,正如我在回答中所写go_to_detail_page,使用. 而不是goToDetailedPage.

于 2012-12-31T11:53:49.003 回答
0

您可以将唯一标识符设置为按钮tag

UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
[rightButton addTarget:self
                action:@selector(go_to_detail_page:)    
      forControlEvents:UIControlEventTouchUpInside];
annView.rightCalloutAccessoryView = rightButton; 
rightButton.tag == any unique number // it would act as unique identifier

并按如下方式检索它

- (IBAction)go_to_detail_page:(id)sender;{

    UIButton *button = (UIButton *)sender;
    if(button.tag==unique identifier){
        // this is the rightButton
        // your logic
    }
    else
    {

    }
}
于 2012-12-31T11:39:20.143 回答
0

嘿,您可以将 UIButton 子类化并将 NSString* 成员标记为每个按钮实例。

于 2012-12-31T11:31:19.580 回答