视图控制器-navigationcontroller

本文详细介绍了导航控制器的组织结构和使用方法,包括视图间的跳转、按钮设置及消息传递等核心功能。同时对比了导航栏与工具栏的区别,并提供了三种创建导航控制器的方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

navigationcontroller里组织的视图是由层次关系。

内部有个rootviewcontroller,根视图控制器。以栈的方式组织视图控制器,对于进栈的控制器是先进后出。后进先出。

导航控制器始终显示的是栈顶的视图控制器。

 

在navigateitem里可以设置标题,返回按钮的标题,以及提示,提示用的少。主要是标题,返回按钮的标题是,在下级视图里,返回来的时候返回按钮显示的标题。

常用的属性有tintcolor.

对于model方式,是通过视图控制器自己调用present dismiss等方法来创建和销毁的。

对于push方式,是通过push,pop方法来显示视图控制器和释放控制器的。

视图控制器之间传递消息

1) 父视图向子视图传递消息,直接调用子视图的方法或者给子视图的成员变量赋值

2)子视图给父视图传递消息,可以在子视图定义代理或者block,父视图实现代理,或者实例化子视图的时候,传给子视图block定义。

  子视图触发代理或者block就把消息传到父视图。

 

在storyboard里可以用segue连线方式也可以用代码push方式做视图跳转。

在xib里只能使用push代码方式跳转。

 

navigatebar和toolbar的区别

都可以设置标题。

navigatebar只能放左右两边按钮

toolbar可以放置多个按钮。

在导航控制器的子视图控制器里,是用自己内部的导航控制器来push出下一个视图。在返回的时候也是用自己内部的导航控制器pop出去到上一级视图或者其他视图,或者根视图。

 

一般在导航控制器里,左边的按钮不用设置,只设置右边的按钮。左边默认是返回按钮。

 

用storyboard方式创建的连线,叫segue,可以在2个控制器之间建立segue,在控制器里按钮执行代码里,调用performsegue方法,执行跳转。

 

 

如果没有添加导航控制器,在一个视图里用segue方式push一个视图的时候会报错。但model方式是不会报错的。

 

 

 使用方式一:storyboard内嵌方式

1)创建一个带storyboard的singleview程序

2)选择当前视图控制器

3)在Editor菜单里选择添加嵌入导航控制器

这样就添加进来导航控制器

4)运行程序,会看到导航栏

第二种方式:拖导航栏控件到storyboard上

1) 创建带storyboard的单视图程序。

2)打开storyboard,拖导航控制器到storyboard

3) 把代表启动开始的箭头,拖到导航控制器开始上

4)删除导航控制器自带的视图控制器

5)然后在导航控制器上点击右键,连接rootviewcontroller到刚添加的视图控制器上。把当前这个视图控制器设置为

     导航控制器的根视图控制器

6)运行应用程序,在跟视图控制器上就看到导航栏。

 

 使用方式三:代码方式创建

1)创建空项目

2)添加一个带xib的视图控制器,并设置代理的window的主视图控制器是当前这个视图控制器

3)修改xib里视图的大小

4)拖按钮到xib视图上,这时候程序已经可以运行。

5)修改代理方法,实例化导航控制器类,然后设置window的根视图控制器是导航控制器

6)设置之前的视图控制器作为导航控制器的根视图控制器,代码如下

#import "AppDelegate.h"
#import "MainViewController.h"

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];
    
    
    MainViewController *controller = [[MainViewController alloc] init];
    UINavigationController *navicontroller = [[UINavigationController alloc] initWithRootViewController:controller];
    [self.window setRootViewController:navicontroller];
    
    
    [self.window makeKeyAndVisible];
    return YES;
}

 7)运行程序,就看到视图控制器上显示了导航栏

 跳转代码

- (IBAction)click:(id)sender {
    SecondViewController *controller = [[SecondViewController alloc] init];
    [self.navigationController pushViewController:controller animated:YES];
    
    
}

 

设置当前视图控制器标题和在下一级视图控制器里显示的返回按钮的标题

// Do any additional setup after loading the view from its nib.
    [self.navigationItem setTitle:@"第一个视图"];
    // 这样设置是设置不上的,因为现在这个按钮还没有被实例化
    [self.navigationItem.backBarButtonItem setTitle:@"返回"];
    self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"返回" style:UIBarButtonItemStyleDone target:nil action:nil];

 

设置左右两边按钮代码

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    [self.navigationItem setTitle:@"第一个视图"];
    // 这样设置是设置不上的,因为现在这个按钮还没有被实例化
    [self.navigationItem.backBarButtonItem setTitle:@"返回"];
    self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"返回" style:UIBarButtonItemStyleDone target:nil action:nil];
    
    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"设置" style:UIBarButtonItemStyleDone target:nil action:nil];
    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"查看" style:UIBarButtonItemStyleDone target:nil action:nil];
}

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/damao2012/p/3349493.html

资源下载链接为: https://pan.quark.cn/s/140386800631 通用大模型文本分类实践的基本原理是,借助大模型自身较强的理解和推理能力,在使用时需在prompt中明确分类任务目标,并详细解释每个类目概念,尤其要突出类目间的差别。 结合in-context learning思想,有效的prompt应包含分类任务介绍及细节、类目概念解释、每个类目对应的例子和待分类文本。但实际应用中,类目和样本较多易导致prompt过长,影响大模型推理效果,因此可先通过向量检索缩小范围,再由大模型做最终决策。 具体方案为:离线时提前配置好每个类目的概念及对应样本;在线时先对给定query进行向量召回,再将召回结果交给大模型决策。 该方法不更新任何模型参数,直接使用开源模型参数。其架构参考GPT-RE并结合相关实践改写,加入上下文学习以提高准确度,还使用BGE作为向量模型,K-BERT提取文本关键词,拼接召回的相似例子作为上下文输入大模型。 代码实现上,大模型用Qwen2-7B-Instruct,Embedding采用bge-base-zh-v1.5,向量库选择milvus。分类主函数的作用是在向量库中召回相似案例,拼接prompt后输入大模型。 结果方面,使用ICL时accuracy达0.94,比bert文本分类的0.98低0.04,错误类别6个,处理时添加“家居”类别,影响不大;不使用ICL时accuracy为0.88,错误58项,可能与未修改prompt有关。 优点是无需训练即可有较好结果,例子优质、类目界限清晰时效果更佳,适合围绕通用大模型api打造工具;缺点是上限不高,仅针对一个分类任务部署大模型不划算,推理速度慢,icl的token使用多,用收费api会有额外开销。 后续可优化的点是利用key-bert提取的关键词,因为核心词语有时比语意更重要。 参考资料包括
内容概要:本文详细介绍了哈希表及其相关概念和技术细节,包括哈希表的引入、哈希函数的设计、冲突处理机制、字符串哈希的基础、哈希错误率分析以及哈希的改进与应用。哈希表作为一种高效的数据结构,通过键值对存储数据,能够快速定位和检索。文中讨论了整数键值和字符串键值的哈希方法,特别是字符串哈希中的多项式哈希及其优化方法,如双哈希和子串哈希的快速计算。此外,还探讨了常见的冲突处理方法——拉链法和闭散列法,并提供了C++实现示例。最后,文章列举了哈希在字符串匹配、最长回文子串、最长公共子字符串等问题中的具体应用。 适合人群:计算机科学专业的学生、算法竞赛选手以及有一定编程基础并对数据结构和算法感兴趣的开发者。 使用场景及目标:①理解哈希表的工作原理及其在各种编程任务中的应用;②掌握哈希函数的设计原则,包括如何选择合适的模数和基数;③学会处理哈希冲突的方法,如拉链法和闭散列法;④了解并能运用字符串哈希解决实际问题,如字符串匹配、回文检测等。 阅读建议:由于哈希涉及较多数学知识和编程技巧,建议读者先熟悉基本的数据结构和算法理论,再结合代码实例进行深入理解。同时,在实践中不断尝试不同的哈希策略,对比性能差异,从而更好地掌握哈希技术。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值