我还是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;
为什么这对我来说只是感觉重复和不优雅?
答案 0 :(得分:3)
通常,你有类似的按钮都触发相同的动作,这个想法是类似的按钮动作应该在它们之间有一些共同的代码。然后,使用tag
属性标识单击了哪个按钮。例如,数字按钮触发特定动作,操作员按钮触发另一个动作,等等。
- (void)didClickOperatorButton:(id)button
{
switch ([button tag])
{
case kAdditionOperation:
// Do the addition operation ...
// etc..
您可以在Interface Builder中的任何控件上设置tag
属性。
答案 1 :(得分:2)
如果您使用IBOutlets并在Interface Builder / Xcode 4中将它们连接起来,那么这不仅仅是一种编程决定。这样做与否并不一定会影响mvc范式。
这是您的选择,如果您在视图控制器中保留24个IBOutlet并从笔尖加载按钮,因为它可能更容易在您的界面中激活它们,或者让阵列充满按钮,并将它们添加到您的以编程方式查看并使用正确的操作进行设置。
你也可以让不同的nib中的按钮用于不同的viewcontroller - 比如数字键盘,简单的命令和更高的命令和功能。每个视图控制器都有一个特定协议的委托,所有协议都可以在'BrainController'上实现。这个设置对于一个简单的计算器来说可能有点过分,但允许你使用nib,而不会使用IBOutlets过度拥挤的viewcontoller 。您可以在其他项目中重复使用它,即带有远程控制界面的应用程序中的数字键盘。
答案 2 :(得分:1)
如果你使用XIB和很多对象,那么是的。如果你打算让对象做一些特别的事情,比如稍后在代码中调用某些方法时禁用按钮,那么YES,挂钩一个IBOutlet。如果您只是将按钮连接到IBActions,那么NO,只需将任何按钮(没有IBOutlet)连接到您的IBAction,这将节省您连接一堆对象。