前言 在C#开发中,处理Excel文件是一项常见的任务。...和 VerticalAlignment 属性以编程方式对齐文本,如下所示: worksheet.Range["A1"].HorizontalAlignment = HorizontalAlignment.Center...RichText 控件 GcExcel 支持在单元格中应用富文本格式。富文本格式允许使用不同的颜色、字体、效果(粗体、下划线、双下划线、删除线、下标、上标)等在单元格中设置文本样式。...条件格式 在工作表中,Excel 允许用户对单个或一系列单元格创建条件格式规则,使单元格、行、列或整个工作表中的数据自动应用不同的格式。...借助 GcExcel,可以使用工作簿的 Styles 集合以编程方式将这些快速样式应用于单元格或单元格区域,并将其作为值提供给 IRange.Style 属性,如下所示: worksheet.Range
在阅读许多关于软件架构的知识后,我最近 6 个月一直在学习 MVVM 协议模型。为了理解这个协议需要引用 Natasha The Robot 的一篇文章,这篇文章里介绍了关于编程协议的所有知识。...该模型的另一个重要的功能就是它可以负责为 ViewController 实例化并注入 ViewModel + Model。 这有助于依赖注入时代码重用更多。...因此 VC 是独立的、封装完整的,重要的是要方便测试和提高代码的重用性。 这种独立意味着在我想要让界面灵活可变的时候可以用这种控制器来实现。...我们可以看到在 OwlsFlowController 案例中,通过配置选择是否在网格还是列表中显示数据,在本例中是固定的,但它可以有两种测试情况。...在本例中,只有数据和子单元的变化,可以作为一个参数传递,并为所有列表创建一份可重用的代码。 这里有趣的一点是实现了两种响应协议:一个用于网格和一个列表。但两个的实现是相同的。
. navigationBar方式可以调用) NavigationBar管理多个NavigationItem,和NavigationController一样都是用push和pop的方式推进推出各自管理的东西...NavigationItem包含多个UIBarButtonItem NavigationController管理着ToolBar,通过navigationController.toolbar方式调用 控制器管理的东西...(iOS7之后,在导航中右划会进行pop操作,设置这个的enable可以控制设置手势是否失效) @property(nullable, nonatomic, readonly) UIGestureRecognizer...controller对应的导航项 @property(nonatomic,readonly,strong) UINavigationItem *navigationItem; (2)push的时候隐藏底部栏,如push...animated:(BOOL)animated; 这个方法是为了iOS方法的命名统一,在导航中,其作用和push一样 - (void)showViewController:(UIViewController
以这种方式,你可以创建超过 5 个的ViewController 给TabBarController,它将自动在Tabbar 上显示 More... 按钮。...这将导致增加一个 ViewController 到画布中: 当然你也可以直接从 Object Library 中拖一个NavigationController,但 Embed In 命令更简单一些...我想将新的场景放在第一个Tab上,可以用拖拽 Tab 的方式改变它们的顺序。 运行程序,现在第一个 Tab 已经变成了NavigationController。 ...与之相仿,在 NavigationController 所包含的ViewController上,有一个 NavigationItem 对象,可用于设置导航栏。...在顶层ViewController 中不能再引用应用程序委托。这真是个不幸,我们只能通过代码方式获得引用。
对于父级VC与子级VC分别有navigationController的情况,即不是使用push方式加载子VC,而是通过AddChildViewController的方式添加的场景,则父级导航条会覆盖在子级导航条上面...,所以需要在载入时把父级导航条做隐藏处理: 1.2 navigationItem 在含有导航条的ViewController中,VC的navigationItem与VC.navigationController...中实现,而不是在NavigationViewController中实现。...否则会导致页面切换时选中状态不准确 TabBar与导航条混用时,TabBarItem的设置是在NavigationController中,而不是内容Controller中,切记!!!...: YES]; [super pushViewController: viewController animated: animated]; 而Tabbar的显示,则只有在Pop函数调用前执行才真正起作用
528168 二、导航控制器的创建和controller的管理 导航控制器是一个堆栈结构,只是其中管理的对象是controller,通过push与pop进行controller的切换,我们有两种方式可以创建导航控制器...//iOS7之后,在导航中右划会进行pop操作,设置这个的enable可以控制设置手势是否失效 @property(nullable, nonatomic, readonly) UIGestureRecognizer... *interactivePopGestureRecognizer; 四、iOS8后导航的新特性 //这个方法是为了iOS方法的命名统一,在导航中,其作用和push一样 - (void)showViewController... *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated...controller对应的导航项 @property(nonatomic,readonly,strong) UINavigationItem *navigationItem; //push的时候隐藏底部栏,如push
// 不显示动画,导航栏显示就比较突兀 [self.navigationController setNavigationBarHidden:YES]; // 显示动画,在侧滑时,导航栏显示就比较顺滑...2.重写导航控制器的Push方法,在push之前,设置navigationItem.backBarButtonItem。...presentViewController:alertVC animated:YES completion:nil]; return NO; } return YES; } 4.导航控制器的页面跳转方式...安卓中的页面跳转有四种方式: standard、singleTop、singleTask、singleInstance。...在原始堆栈数组中判断是否存在该类型的控制器,如果存在记录其索引。 在复制的数组中将索引及上方所有控制器移除。 把将要push出来的控制器添加到复制的数组中。
2.在Tab Bar Controller中又对应着三个Navigation Controller,点击不同的item会跳转到不同的NavigationController。 ...3.每个Navigation Controller中又对应着一些ViewController, 这些ViewController之间我们可以通过按钮控制NavigationController来进行切换...1.登陆页面的的跳转实现 在登陆ViewController中要跳转到TabBarController中需要根据用户输入的信息来实现跳转。...其实在我们storyboard中还是蛮简单的,在storyboard选择我们要关联的视图控制器,在 Class中选中我们新建的视图控制器类即可。...接下来会为每个导航控制器配置NavigateBar, 在一个NavigationController中只有一个NavigationBar, 而在一个NavigationController下的各个ViewController
(4)最重要的可能是给navigationItem设置左右两边的button,一般默认的在左边有“返回”。在右边的有“摄像头”(如微信朋友圈)。...我们当然也能够利用自己创建的导航条button来覆盖原来导航控制器产生的默认的button,如“<Back”。 相同。...须要创建两个视图控制器(ViewController根视图控制器,SecondViewController子视图控制器),然后放在导航控制器栈中。...在ViewController.m中: #import "ViewController.h" #import "SecondViewController.h" @interface ViewController...pushViewController:senCon1 animated:YES]; } @end 在SecondViewControllor.m中: #import "SecondViewController.h
在iOS开发之通过代理逆向传值一文中,分析了利用代理模式来逆向传值,其实还有一些其他的方式,如通知、Block等,相比较代理,我个人认为反而要简单些,但是需要处理好细节问题,如Block循环引用。...传值方 1、定义Block用于传值 2、声明一个上述Block属性,这个属性的具体实现需要捕获方传进来 3、在需要传值的时候调用Block完成传值 捕获方 1、传递一个Block给传值方 2、...在Block中捕获传过来的值,并根据需求处理捕获的值 二、Block与逆向传值 还是那句No Code, No BB,案例效果如下: ?...weakself.returnValueBlock) { //将自己的值传出去,完成传值 weakself.returnValueBlock(inputString); } [self.navigationController...*passedValue){ self.nextPassedValue.text = passedValue; }; [self.navigationController
状态栏配置 iOS状态栏的设置有两种方式 这两种方式是根据UIViewControllerBasedStatusBarAppearance也就是View controller-based status...在NavigationController中,那么直接在ViewController设置是不生效的,只能在NavigationController中设置 所以如果你用的Storyboard中配置的NavigationController...话,就必须为NavigationController添加一个自定义的类,就稍显麻烦了,所以并不推荐用这种方式设置 设置背景色 改变方法有两种 系统提供的方法 navigationBar的setBarTintColor...; 注意 1) appear.translucent配置在早期系统会崩溃,不建议配置,建议在ViewController中配置 2) 在translucent=true也就是透明时,barTintColor...跟去黑线的方式相同
UINavigationController 有个 Property,是一个存储所有 push 进 navigationcontroller 的视图的集合,是一个栈结构,当我们要 pop 到某个 ViewController...的时候,直接用 for in 去遍历 viewControllers 即可: for (UIViewController viewController in self.navigationController.viewControllers...) { if ([viewController isKindOfClass:[AccountManageViewController class]]) { [self.navigationController...UIView 的方式独立出来,如果在该视图中有触发事件(事件处理不需要父视图的上下文),就会遇到在 UIView 中获取 UIViewController 的情况,可以写一个 UIView 的范畴 UIView...Pods中是无效的。
第一种做法 注意这里一定要用动画的方式隐藏导航栏,这样在使用滑动返回手势的时候效果最好,和上面动图一致.这样做有一个缺点就是在切换tabBar的时候有一个导航栏向上消失的动画. - (void)viewWillAppear...setNavigationBarHidden:NO animated:animated]; } 第二种做法 设置self为导航控制器的代理,实现代理方法,在将要显示控制器中设置导航栏隐藏和显示,使用这种方式不仅完美切合滑动返回手势...最后要记得在控制器销毁的时候把导航栏的代理设置为nil。...*)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated...{ // 判断要显示的控制器是否是自己 BOOL isShowHomePage = [viewController isKindOfClass:[self class]];
在iOS开发过程中,我们经常性会需要获取当前页面的ViewController,然后利用ViewController进行一些操作,例如在最顶层的ViewController上展示一个UIAlertController...,或者在最顶层的ViewController上present另一个ViewController,或者进行其他操作。...在寻找的过程中,要分别考虑当前ViewController是UITabBarController和UINavigationController的情况,同时还要考虑到当前ViewController是否通过...获取到的是项目的根视图,结合可能用到UITabBarController或者UINavigationController作为导航结构,以及可能present出新的VC,其实如果用storyboard的方式写...用上面的方法获取到顶层的视图,判断currentVC.navigationController是否为nil。
pushViewController:sec animated:YES ]; 在push 之后的那个VC中可以设置这返回的颜色: [self.navigationController.navigationBar...在BaseViewController的ViewDidLoad中如下设置即可:注意不用在设置 self.navigationItem.leftBarButtonItem =[[UIBarButtonItem...UINavigationItem属于MVC中的M,封装了要显示在UiNavigationBar上的数据,定义了UINavigationItem上按钮的触发事件,外观等 -initWithBarButtonSystemItem...navigationItem包含了bar视图的全部元素(如title,tileview,backBarButtonItem等),受当前viewcontroller管理,即bar形成整个nv的导航视图,然后每个...自带了一个工具栏,通过设置 self.navigationController.toolbarHidden = NO来显示工具栏,工具栏中的内容可以通过viewController的toolbarItems
今天在做开发的时候,忽然发现在视图的viewWillAppear:方法中添加: [self.tableView reloadData]; 不起作用,viewWillAppear:这个方法根本没有调用 后来发现原来用了...UINavigationController后,viewWillAppear方法是没有效果的,要用UINavigationControllerDelegate的– navigationController...所以要做到这个,你必须做以下几步: 设置代理类 nav.delegate = self; 代理类实现UINavigationControllerDelegate Protocol 在代理类中添加– navigationController...:willShowViewController:animated:方法 如: - (void)navigationController:(UINavigationController *)navigationController...willShowViewController:(UIViewController *)viewController animated:(BOOL)animated { [self.myTableView
图片来源:Apple Apple在Xcode 8中对Interface Builder进行了很大的改进。...这正是Interface Builder的创建方式。 但对开发人员而言,这可能会导致多个问题。 源代码控制:故事板合并冲突很难解决,因此简单地在单独的故事板中工作将使您的团队生活更轻松。...有多少次您在错误的ViewController中单击一次无意中更改了约束?...1.使用Xcode 7中引入的故事板引用 2.在代码中连接故事板。 你可以阅读更多关于第一种方式在这里。 我将介绍第二种方式,因为它仍然常用于复杂的项目。...在代码中初始化基于storyboard的viewController时,我经常会看到以下代码: let storyboard = UIStoryboard(name: “Main”, bundle: nil
整体架构与模块化划分设计 项目采用Category方式设计把项目按照某个具体业务逻辑功能划分、采用中间调度模块IComMediator管理输入与回调内容进行模块化解耦 #import <Foundation...performTarget:(NSString *)targetName action:(NSString *)actionName params:(NSDictionary *)params { // 运行时方式...withObject:params]; #pragma clang diagnostic pop } else { // 这里也是处理无响应请求的地方,在notFound...实际开发过程中,可以用前面提到的固定的target顶上的。...= [[IComMediator sharedInstance] IComMediator_CalendarViewController:param]; [ViewController.navigationController
-> Bool { var viewController = Main(nibName: "Main", bundle: nil) navigationController...3、然后在Main.swift 中编写一下TableView 的数据源和代理的方法。这里我们用的是 自己定义的 Cell。...Cell 的重用很重要,通过上面的 println(cell),滚动Cell,观察打印出来的 Cell 地址。能够看到 Cell 并没有进行重用。...在 override func viewDidLoad() { } 中加入以下的代码使 Cell 重用。...记得绑定(同步骤1),Add.xib UI例如以下: 为了在Main.swift 中接收到 Add.xib 中用户输入的信息,我们在 Add.swift 定义一个协议。
; 提示:UIViewController 有一个属性是navigationController,如果当前ViewController在某个NavigationController的堆栈中 的话(即是被推送过来的...不过,也可以视具体情况,我们直接在一个独立的视图控制器中创建UITabBarController实例对象,如自定义一个用于视图 切换的控制器类ViewSwitcherViewController,就可在其中的...在实现UITabBarControllerDelegate委托的视图控制器中重写init方法来自定义UITabBarItem条目。...编程中占据非常重要的位置,因此我们一定要掌握。...控制器加载视图过程 当调用视图控制器的view属性时,视图控制器会先调用loadView方法加载视图,因此,可以在loadView方法中创建所有的视图,这是比较好的编程惯例。
领取专属 10元无门槛券
手把手带您无忧上云