Mac:取消选中子菜单项

时间:2015-05-08 09:00:31

标签: macos swift statusbar radio

这是我想要实现的目标。

在子菜单1下,有三个选项可供选择:默认操作,操作1和操作2.我想做类似于单选按钮功能的操作,如果选择了一个选项,则另一个选项会自动取消选中

我想知道是否有办法在其他IBAction函数中执行其他IBAction函数的NSOffState或NSOnState。 一个例子是用户在启动新游戏时必须在初级,中级或高级模式之间进行选择的菜单。

e.g。

@IBAction func actionOne(sender: NSMenuItem){

   if(sender.state == NSOnState){
      sender.state = NSOffState
      /*turn on Default Action*/
   } else {
      sender.state = NSOnState
      /*turn off Default Action and Action 2*/
      /*code for Action 1's settings*/
   }

@IBAction func actionTwo(sender: NSMenuItem){

   if(sender.state == NSOnState){
      sender.state = NSOffState
      /*turn on Default Action*/
   } else {
      sender.state = NSOnState
      /*turn off Default Action and Action 1*/
      /*code for Action 1's settings*/
   }

@IBAction func defaultAction(sender: NSMenuItem){

   if(sender.state == NSOnState){
      sender.state = NSOffState
      /*code for default settings*/
   } else {
      sender.state = NSOnState
      /*turn off Action 1 or Action 2 (whichever one was on)*/
      /*code for default settings*/
   }

显然,由于缺乏声誉,我无法发布任何图片。 我将它链接到一个Dropbox图片; https://goo.gl/SGvvcq

这是Apple的官方页面链接,用于描述setState。 https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/MenuList/Articles/MenuItemStates.html

"您可以使用状态来实现一组互斥的菜单项,就像一组单选按钮一样。例如,游戏可以有三个菜单项来显示游戏级别:初级,中级和高级。要实现这样的组,请创建一个他们都使用的操作消息。此操作消息更改了相应的设置,然后通过取消选中当前选中的项目并检查新选择的项目来反映该更改。"

1 个答案:

答案 0 :(得分:0)

有很多方法可以做到这一点。这是一个简单的例子:

<?php if ($users) { ?>
<?php foreach ($users as $user) { ?>
<div class="modal fade" id="myModal-<?php echo $user['username']; ?>">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header clearfix">
            <div class="pull-left">
            <h2 style="font-size: 18px;">Are you absolutely sure?</h2></div>
            <div class="pull-right">
            <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
            </div>
            </div>
            <div class="modal-body">
            <div class="alert alert-warning text-center">
                Unexpected bad things will happen if you don't read this! 
            </div>
            <p class="text-center">If you delete this user, this user will not be able to login to the admin,
            and all of his or her user information will be <b>Removed For Ever!</b>
            </p>
            <br/>
            <p class="text-center">Please type in the username of the user to confirm.</p>
            <p class='error_msg'></p>
            <form role="form" action="<?php echo $action;?>" method="post" enctype="multipart/form-data" id="form_id">
                <div class="form-group">
                    <input type="text" id="input-user-<?php echo $user['username']; ?>" name="username" value="" class="form-control input-user" />
                    <input type="hidden" name="user_id" value="<?php echo $user['user_id']; ?>" class="form-control" />
                </div>
                <div class="form-group text-center">
                    <button type="submit" id="button-delete-user-<?php echo $user['username']; ?>" class="btn btn-user-delete"><span class="text-danger">I understand the consequences, deleting this user</span></button>
                </div>
            </form>
            </div>
        </div><!-- /.modal-content -->
    </div><!-- /.modal-dialog -->
</div><!-- /.modal -->
<script>
$(document).ready(function(){

$('#button-delete-user-<?php echo $user['username']; ?>').attr('disabled', true);

    $('#input-user-<?php echo $user['username']; ?>').keyup(function(){

        if($(this).val().length !=0)

        $('#button-delete-user-<?php echo $user['username']; ?>').attr('disabled', false);            

        else

        $('#button-delete-user-<?php echo $user['username']; ?>').attr('disabled', true);
    });
});
</script>
<?php }?>
<?php }?>

通过创建所有菜单共有的操作,您可以避免将控制代码放在每个菜单操作中,只需调用@IBOutlet weak var testsMenu: NSMenu! func actionCommonToAllMenus(#current: NSMenuItem) { // Loops over the array of menu items for menuItem in testsMenu.itemArray as! [NSMenuItem] { // Switches off the first (and unique) 'on' item if menuItem.state == NSOnState { menuItem.state = NSOffState break } } // Previous 'on' item is now 'off', time to set the current item to 'on' current.state = NSOnState } @IBAction func actionMenuOne(sender: NSMenuItem) { actionCommonToAllMenus(current: sender) // do menu 1 stuff } @IBAction func actionMenuTwo(sender: NSMenuItem) { actionCommonToAllMenus(current: sender) // do menu 2 stuff } 方法即可。