3

我还是 iOS 的初学者,所以最近我做了很多教程。

假设我正在制作一个应用程序,例如计算器,假设有 24 个按钮。我已经看到了示例代码,其中按钮的标签被用来确定它是什么按钮,但这似乎真的很笨拙,尤其是在尝试翻译应用程序时。

那么,只是硬着头皮为每个按钮设置一个 IBOutlet 会更好吗?为什么或者为什么不?

如果不是,那么在保持 MVC 范式的同时,最优雅的方式是什么?


好的,我只是在回顾我的代码,现在我感觉比以前更像一个菜鸟......我真的在谈论 IBActions,而不是 IBOutlets......我应该为不同的按钮提供一大堆 IBActions 吗?这是 viewController.h 文件中现在的样子:

- (IBAction)digitPressed:(UIButton *)sender;
- (IBAction)operationPressed:(UIButton *)sender;
- (IBAction)dotPressed:(UIButton *)sender;
- (IBAction)button_mClear_Pressed:(UIButton *) sender;
- (IBAction)button_mPlus_Pressed:(UIButton *) sender;
- (IBAction)button_mMinus_Pressed:(UIButton *) sender;
- (IBAction)button_mRecall_Pressed:(UIButton *) sender;
- (IBAction)button_AC_Pressed:(UIButton *) sender;
- (IBAction)button_PlusMinus_Pressed:(UIButton *) sender;

为什么这对我来说只是重复和不雅?

4

3 回答 3

3

通常,您会有类似的按钮都触发相同的操作,其想法是类似的按钮操作应该在它们之间有一些共同的代码。然后,您使用该tag属性来识别单击了哪个按钮。例如,数字按钮触发特定动作,操作员按钮触发另一个动作,等等。

- (void)didClickOperatorButton:(id)button 
{
    switch ([button tag])
    {
        case kAdditionOperation: 
            // Do the addition operation ...
            // etc..

您可以tag在 Interface Builder 中的任何控件上设置属性。

于 2011-06-21T01:14:35.910 回答
2

如果您使用 IBOutlets 并将它们连接到 Interface Builder/Xcode 4 中,则更多的是品味问题,而不是编程决定。这样做与否并不一定会影响 mvc 范式。

这是您的选择,如果您在视图控制器中保留 24 个 IBOutlets 并从笔尖加载按钮,因为在您的界面中排列它们可能更容易,或者拥有一个充满按钮的数组,并以编程方式将它们添加到您的视图中用正确的动作设置它们。

您还可以为不同的视图控制器在不同的笔尖上设置按钮——比如说数字键盘、简单的命令和高级命令和功能。每个视图控制器都有一个特定协议的委托,所有这些都将由'BrainController'实现。这个设置对于一个简单的计算器来说可能有点矫枉过正,但允许你使用笔尖,而没有一个视图控制器被 IBOutlets 过度拥挤. 并且您可以在其他项目中重复使用它的 oarts,即带有远程控制界面的应用程序中的数字键盘。

于 2011-06-20T23:17:04.393 回答
1

如果您使用 XIB 和很多对象,那么可以。如果你打算让对象做一些特别的事情,比如在稍后的代码中调用某个方法时禁用按钮,那么是的,连接一个 IBOutlet。如果您只是将按钮连接到 IBActions,那么不,只需将任何按钮(没有 IBOutlet)连接到您的 IBAction,这将节省您连接一堆对象的时间。

于 2011-06-20T23:13:21.473 回答