How to: Save order of tabs when customizing tabs in UITabBarController

后端 未结 8 1236
终归单人心
终归单人心 2020-11-29 21:02

I am having problems finding any other information than the docs for how to save the tab order for my UITabBarController, so that the user\'s customization is saved for next

8条回答
  •  忘掉有多难
    2020-11-29 21:30

    I will explain how to do this programmatically. NOTE: This is using ARC, so you may have to insert retain/release calls as needed.

    You use the tag property of the UITabBarItem for sorting. For every UIViewController that you are adding to the UITabBarController, make sure that each has a unique tag.

    - (id)init
    {
        self = [super init];
        if (self) {
            self.tabBarItem.tag = 0;
            self.tabBarItem.image = ;
            self.tabBarItem.title = ;
        }
        return self;
    }
    </code></pre>
    
    <p>Presumably you would just use their default sorting order for their tags, so whatever you have as your original first view controller would be 0, followed by 1, 2, 3, etc.</p>
    
    <p>Set up your UIViewControllers in the AppDelegate's <code>didFinishLaunchingWithOptions</code> as you normally would, making sure that you are instantiating them in their "default order".  As you do so, add them to an instance of a NSMutableArray.</p>
    
    <pre><code>- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {    
        self.tabBarController = [[UITabBarController alloc] init];
        self.tabBarController.delegate = self;
    
        NSMutableArray *unsortedControllers = [NSMutableArray array];
    
        UIViewController *viewOne = [[UIViewController alloc] init];
        [unsortedControllers addObject:viewOne];
    
        UIViewController *viewTwo = [[UIViewController alloc] init];
        [unsortedControllers addObject:viewTwo];
        ...
    </code></pre>
    
    <p>After they are all instantiated and added to the array, you will check to see if the user has customized their order by querying <code>NSUserDefaults</code>.  In the defaults, you will store an array of the user's customized tab bar order.  This will be an array of NSNumbers (how this is created is explain in the last code snippet).  Use these to create a new "sorted" array of view controllers and pass that to the tab bar controller.  If they haven't customized the order, the default will return nil and you can simply used the unsorted array.</p>
    
    <pre><code>    ...
        NSArray *tabBarOrder = [[NSUserDefaults standardUserDefaults] arrayForKey:@"tabBarOrder"];
        if (tabBarOrder)
        {
          NSMutableArray *sortedControllers = [NSMutableArray array];
          for (NSNumber *sortNumber in tabBarOrder)
          {
             [sortedControllers addObject:[unsortedControllers objectAtIndex:[sortNumber intValue]]];
          }
          self.tabBarController.viewControllers = sortedControllers;
        } else {
          self.tabBarController.viewControllers = unsortedControllers;
        }
        [self.window setRootViewController:self.tabBarController];
        [self.window makeKeyAndVisible];
    
        return YES;
    }
    </code></pre>
    
    <p>To create to customized sort order, use the UITabBarController's delegate method:</p>
    
    <pre><code>- (void)tabBarController:(UITabBarController *)tabBarController didEndCustomizingViewControllers:(NSArray *)viewControllers changed:(BOOL)changed
    {
        NSMutableArray *tabOrderArray = [[NSMutableArray alloc] init];
        for (UIViewController *vc in self.tabBarController.viewControllers)
        {
            [tabOrderArray addObject:[NSNumber numberWithInt:[[vc tabBarItem] tag]]];
        }
        [[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithArray:tabOrderArray] forKey:@"tabBarOrder"];
        [[NSUserDefaults standardUserDefaults] synchronize];
    }
    </code></pre>
        </p>
                 <div class="appendcontent">
                                                            </div>
                </div>
                <div class="jieda-reply">
                  <span class="jieda-zan button_agree" type="zan" data-id='580346'>
                    <i class="iconfont icon-zan"></i>
                    <em>0</em>
                  </span>
                       <span type="reply" class="showpinglun" data-id="580346">
                    <i class="iconfont icon-svgmoban53"></i>
                   讨论(0)
                  </span>
                                                      
                  
                  <div class="jieda-admin">
                              
                 
           
              
                  </div>
                                           <div class="noreplaytext bb">
    <center><div>   <a href="https://www.e-learn.cn/qa/q-147393.html">  查看其它8个回答
    </a>
    </div></center>
    </div>            </div>
                             <div class="comments-mod "  style="display: none; float:none;padding-top:10px;" id="comment_580346">
                        <div class="areabox clearfix">
    
    <form class="layui-form" action="">
                   
                <div class="layui-form-item">
        <label class="layui-form-label" style="padding-left:0px;width:60px;">发布评论:</label>
        <div class="layui-input-block" style="margin-left:90px;">
             <input type="text" placeholder="不少于5个字" AUTOCOMPLETE="off" class="comment-input layui-input" name="content" />
                            <input type='hidden' value='0' name='replyauthor' />
        </div>
        <div class="mar-t10"><span class="fr layui-btn layui-btn-sm addhuidapinglun" data-id="580346">提交评论 </span></div>
      </div>
      
    </form>
                        </div>
                        <hr>
                        <ul class="my-comments-list nav">
                            <li class="loading">
                            <img src='https://www.e-learn.cn/qa/static/css/default/loading.gif' align='absmiddle' />
                             加载中...
                            </li>
                        </ul>
                    </div>
              </li>
                                  			
            </ul>
            
            <div class="layui-form layui-form-pane">
              <form id="huidaform"  name="answerForm"  method="post">
                
                <div class="layui-form-item layui-form-text">
                  <a name="comment"></a>
                  <div class="layui-input-block">
                
        
    <script type="text/javascript" src="https://www.e-learn.cn/qa/static/js/neweditor/ueditor.config.js"></script>
    <script type="text/javascript" src="https://www.e-learn.cn/qa/static/js/neweditor/ueditor.all.js"></script>
    <script type="text/plain" id="editor"  name="content"  style="width:100%;height:200px;"></script>                                 
    <script type="text/javascript">
                                     var isueditor=1;
                var editor = UE.getEditor('editor',{
                    //这里可以选择自己需要的工具按钮名称,此处仅选择如下五个
                    toolbars:[['source','fullscreen',  '|', 'undo', 'redo', '|', 'bold', 'italic', 'underline', 'fontborder', 'strikethrough', 'removeformat', 'formatmatch', 'autotypeset', 'blockquote', 'pasteplain', '|', 'forecolor', 'backcolor', 'insertorderedlist', 'insertunorderedlist', 'selectall', 'cleardoc', '|', 'rowspacingtop', 'rowspacingbottom', 'lineheight', '|', 'customstyle', 'paragraph', 'fontfamily', 'fontsize', '|', 'indent', '|', 'justifyleft', 'justifycenter', 'justifyright', 'justifyjustify', '|', 'link', 'unlink', 'anchor', '|', 'simpleupload', 'insertimage', 'scrawl', 'insertvideo', 'attachment', 'map', 'insertcode', '|', 'horizontal', '|', 'preview', 'searchreplace', 'drafts']],
                
                    initialContent:'',
                    //关闭字数统计
                    wordCount:false,
                    zIndex:2,
                    //关闭elementPath
                    elementPathEnabled:false,
                    //默认的编辑区域高度
                    initialFrameHeight:250
                    //更多其他参数,请参考ueditor.config.js中的配置项
                    //更多其他参数,请参考ueditor.config.js中的配置项
                });
                            editor.ready(function() {
                	editor.setDisabled();
                	});
                                $("#editor").find("*").css("max-width","362px");
            </script>              </div>
                </div>
                              
        
    
            
             <div class="layui-form-item">
                    <label for="L_vercode" class="layui-form-label">验证码</label>
                    <div class="layui-input-inline">
                      <input type="text"  id="code" name="code"   value="" required lay-verify="required" placeholder="图片验证码" autocomplete="off" class="layui-input">
                    </div>
                    <div class="layui-form-mid">
                      <span style="color: #c00;"><img class="hand" src="https://www.e-learn.cn/qa/user/code.html" onclick="javascript:updatecode();" id="verifycode"><a class="changecode"  href="javascript:updatecode();"> 看不清?</a></span>
                    </div>
                  </div>
                                      <div class="layui-form-item">
                        <input type="hidden" value="147393" id="ans_qid" name="qid">
       <input type="hidden" id="tokenkey" name="tokenkey" value=''/>
                    <input type="hidden" value="How to: Save order of tabs when customizing tabs in UITabBarController" id="ans_title" name="title"> 
                 
                  <div class="layui-btn    layui-btn-disabled"  id="ajaxsubmitasnwer" >提交回复</div>
                </div>
              </form>
            </div>
          </div>
          <input type="hidden" value="147393" id="adopt_qid"	name="qid" /> 
          <input type="hidden" id="adopt_answer" value="0"	name="aid" />
        </div>
        <div class="layui-col-md4">
              
     <!-- 热门讨论问题 -->
         
     <dl class="fly-panel fly-list-one">
            <dt class="fly-panel-title">热议问题</dt>
                <!-- 本周热门讨论问题显示10条-->