当前位置: 首页 > 编程日记 > 正文

iOS - 实现映客首页 TabBar 和滑动隐藏 NavBar 和 TabBar

之前在做直播的时候,参照了映客App,发现其首页的效果还挺不错,在网上找了一下相关仿映客App代码和博客,大部分都是说如何播放直播流和推流,对于UI这块甚少,所以我自己花了点时间研究了一下映客的首页UI效果。

映客首页主要分两部分,一部分是实现没有文字而且中间按钮突出的TabBar,另一部分是显示滑动ScrollView隐藏和显示NavBarTabBar。我们来慢慢看。

一、TabBar实现

首先,我们看下实现后的效果。


映客底部TabBar效果

这里我们可以使用系统的TabBar来实现该效果。

关于如何设置系统的TabBar,这里就不赘述了,可以看到我项目的代码。我们来看重点部分。

1. 提出问题:

  1. 如何实现中间的突出按钮
  2. 中间突出按钮超出TabBar部分是如何响应点击的
  3. 如何实现TabBarItem图片居中且不带文字
(1)中间突出按钮

要实现中间突出的按钮,直接使用系统TabBar还是不行,需要用一个取巧的方法,通过KVC的方式(使用KVC可以修改readonly属性,不过不能滥用哦)使用自定义的TabBar替换系统UITabBar

//创建自己的tabbar,然后用KVC将自己的tabbar和系统的tabBar替换下
HKTabBar *tabbar = [[HKTabBar alloc] init];
//KVC实质是修改了系统的_tabBar
[self setValue:tabbar forKeyPath:@"tabBar"];

替换了系统UITabBar后,就需要实现中间按钮了。我们在自定义TabBar中添加UIButton,作为中间按钮。

1.在HKTabBarinitWithFrame:方法中,初始化中间按钮

//设置中间按钮图片和尺寸
UIButton *centerBtn = [[UIButton alloc] init];
[centerBtn setBackgroundImage:[UIImage imageNamed:@"tab_launch"] forState:UIControlStateNormal];
[centerBtn setBackgroundImage:[UIImage imageNamed:@"tab_launch"] forState:UIControlStateHighlighted];
//这里button的size是根据需要设置的中间图片来的
centerBtn.size = centerBtn.currentBackgroundImage.size;
[centerBtn addTarget:self action:@selector(centerBtnDidClick) forControlEvents:UIControlEventTouchUpInside];
self.centerBtn = centerBtn;
[self addSubview:centerBtn];

2.在layoutSubviews中设置中间按钮和其他Item位置
由于系统ItemUITabBarButton类型,自定义中间按钮为UIutton,所以可以根据Item类型来区分是自定义按钮还是系统Item,再调整每个Item的位置。这里系统UITabBarButton宽度为TabBar宽度减去中间按钮宽度的一半。

//系统自带的按钮类型是UITabBarButton,找出这些类型的按钮,然后重新排布位置,空出中间的位置
Class class = NSClassFromString(@"UITabBarButton");self.centerBtn.centerX = self.centerX;
//调整中间按钮的中线点Y值
self.centerBtn.centerY = (self.height - (self.centerBtn.height - self.height)) * 0.5;NSInteger btnIndex = 0;
for (UIView *btn in self.subviews) {//遍历tabbar的子控件if ([btn isKindOfClass:class]) {//如果是系统的UITabBarButton,那么就调整子控件位置,空出中间位置//按钮宽度为TabBar宽度减去中间按钮宽度的一半btn.width = (self.width - self.centerBtn.width) * 0.5;//中间按钮前的宽度,这里就3个按钮,中间按钮Index为1if (btnIndex < 1) {btn.x = btn.width * btnIndex;} else { //中间按钮后的宽度btn.x = btn.width * btnIndex + self.centerBtn.width;}btnIndex++;//如果是索引是0(从0开始的),直接让索引++,目的就是让消息按钮的位置向右移动,空出来中间按钮的位置if (btnIndex == 0) {btnIndex++;}}
}[self bringSubviewToFront:self.centerBtn];

到这里,中间按钮就实现好了,但是如何让超出TabBar部分(即红色框部分)响应点击事件呢?


TabBar中间按钮突出位置
(2)超出TabBar部分响应点击

按照系统默认处理方式,超出TabBar部分,是不会响应点击事件的(不信的可以自己试试哦)。要响应点击事件,这里就需要重写UIView 的 hitTest:方法(该方法可以决定点击事件的响应者)了。

//重写hitTest方法,去监听中间按钮的点击,目的是为了让凸出的部分点击也有反应
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {//判断当前手指是否点击到中间按钮上,如果是,则响应按钮点击,其他则系统处理//首先判断当前View是否被隐藏了,隐藏了就不需要处理了if (self.isHidden == NO) {//将当前tabbar的触摸点转换坐标系,转换到中间按钮的身上,生成一个新的点CGPoint newP = [self convertPoint:point toView:self.centerBtn];//判断如果这个新的点是在中间按钮身上,那么处理点击事件最合适的view就是中间按钮if ( [self.centerBtn pointInside:newP withEvent:event]) {return self.centerBtn;}}return [super hitTest:point withEvent:event];
}

处理完突出部分,就剩下不带文字的Item了。

(3) TabBar中Item图片居中且不带文字

有的同学可能就会说了,要不带文字,不设置tabBarItemtitle不就好了。但是title这个NavBar的标题也是要用的,所以还是必须要设置。

那要怎么办呢?其实很简单,要实现该效果,以下代码就够了

//设置图片居中,这里的4.5,根据实际中间按钮图片大小来决定
Vc.tabBarItem.imageInsets = UIEdgeInsetsMake(4.5, 0, -4.5, 0);
//设置不显示文字,将title的位置设置成无限远,就看不到了
Vc.tabBarItem.titlePositionAdjustment = UIOffsetMake(0, MAXFLOAT);

到这里,TabBar的实现就结束了,下面我们来看看如何实现隐藏和显示NavBarTabBar

二、隐藏和显示NavBar和TabBar实现

首先,我们来看看效果


滑动隐藏NavBar和TabBar效果

1. 提出问题:

  1. 如何移动NavBarTabBar
  2. 如何控制NavBarTabBar移动距离
  3. 如何控制使ScrollView移动的同时其显示的区域正确
  4. 如何在手指滑动距离较小时,收起或者展开NavBarTabBar
  5. 如何在Push到其他页面,再Pop回来后,NavBarTabBar显示正确

首先,我们要解决最基本的问题,如何让NavBarTabBar移动

(1)移动NavBar和TabBar

移动的话,其实很简单,只需要改变他们的Y坐标即可。

//这里的self就是NavBar或者TabBar
CGRect viewFrame = self.frame;
viewFrame.origin.y = newOffsetY;
self.frame = viewFrame;
(2)控制NavBar和TabBar移动距离

移动距离,就要取决于ScrollView的相对移动距离了,即相对之前contentOffset.y滑动了多少。

在计算相对移动距离之前,我们需要获取上次滑动ScrollViewcontentOffset.y,我们可以在- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView中获取上次滑动ScrollViewcontentOffset.y,即_previousOffsetY

_previousOffsetY = scrollView.contentOffset.y;

之后实现ScrollView的委托方法- (void)scrollViewDidScroll:(UIScrollView *)scrollView,在其中监听ScrollView的移动距离,从而计算相对移动距离deltaY

CGFloat deltaY = scrollView.contentOffset.y - _previousOffsetY;

在得到相对移动距离后,我们就需要分别控制NavBarTabBar的移动距离了。
这里,我们可以实现一个分类来专门控制他们的移动。

要注意的是:当相对距离超出应移动范围时,需要对其校正
那么,我们必须先知道NavBarTabBar坐标的上下限,即其展开和收起时的Y坐标,以下代码openOffsetY为展开的Y坐标,closeOffsetY为收起的Y坐标。

//NavBar
//kStatusBarHeight为状态栏高度
openOffsetY = kStatusBarHeight;
closeOffsetY = -CGRectGetHeight(self.frame;
//TabBar
//kScreenHeight为屏幕宽度,hk_extraDistance为中间按钮突出的距离
openOffsetY = kScreenHeight - CGRectGetHeight(self.frame);
closeOffsetY = kScreenHeight + CGRectGetHeight(self.frame) + self.hk_extraDistance;

以下坐标都代表Y坐标,我们这里只做竖直方向移动
知道可以移动的范围后,就可以根据相对移动距离deltaY计算移动后的坐标了。
对于NavBar,计算后的坐标(即当前坐标减去deltaY),要大于收起的坐标小于展开的坐标。
对于TabBar,计算后的坐标(即即当前坐标加上deltaY),要大于展开的坐标小于收起的坐标。
这里画画图会好理解一些。

//NavBar最终要移动的Y坐标
newOffsetY = CGRectGetMinY(self.frame) - deltaY;
newOffsetY = MAX(closeOffsetY, MIN(openOffsetY, newOffsetY));
//TabBar最终要移动的Y坐标
newOffsetY = CGRectGetMinY(self.frame) + deltaY;
newOffsetY = MIN(closeOffsetY, MAX(openOffsetY, newOffsetY));

之后,就只要将NavBarTabBar移动到指定坐标即可

CGRect viewFrame = self.frame;
viewFrame.origin.y = newOffsetY;
self.frame = viewFrame;

我们再来看看ScrollView是怎么控制移动的。

(3)控制使ScrollView移动的同时其显示的区域正确

细心的童鞋可能会发现,当NavBar收起或者展开的过程中,ScrollView是跟着一起移动的,即ScrollView本身并没滑动,而是Y坐标在改变。那如何实现呢?

这里,我们可以改变ScrollViewcontentInset来满足我们的需求,相对于改变ScrollViewframe要方便很多哦。

我们要根据NavBarTabBar移动后的坐标,改变ScrollViewcontentInsettopbottom
topNavBarMaxY,就是当前Y坐标加上本身的高度。
bottomTabBar突出的距离,即屏幕高度减去其Y坐标大于0的部分。
这里要注意:ScrollViewscrollIndicatorInsets同时也需要更新,不然Indicator显示就有问题了。

CGFloat navBarMaxY = CGRectGetMaxY(self.navigationController.navigationBar.frame);
CGFloat tabBarMinY = CGRectGetMinY(self.tabBarController.tabBar.frame);
UIEdgeInsets scrollViewInset = self.tableView.contentInset;
scrollViewInset.top = navBarMaxY;
scrollViewInset.bottom = MAX(0, kScreenHeight - tabBarMinY);
self.tableView.contentInset = scrollViewInset;
self.tableView.scrollIndicatorInsets = scrollViewInset;
(4)在手指滑动距离较小时,收起或者展开NavBar和TabBar

细心的童鞋可能会发现,映客在滑动距离比较小的时候,有的时候NavBarTabBar会弹回来,有的时候会收起。这个是怎么做的呢?

这个就需要在停止滑动的时候处理,我们可以在ScrollView的委托方法- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate中处理。
在滑动时,要判断当前NavBar或者TabBar滑动距离,是否滑到到最大坐标(最大坐标减去最小坐标)的一半。如果没有滑动,则收起,反之展开。这里可能比较绕,我们看看代码。

//判断当前`NavBar`是展开还是收起
- (BOOL)hk_shouldOpen {CGFloat viewY = CGRectGetMinY(self.frame);//[self hk_openOffsetY]为展开的Y坐标,[self hk_closeOffsetY] 为收起的Y坐标CGFloat viewMinY = [self hk_openOffsetY];viewMinY = [self hk_closeOffsetY] + ([self hk_openOffsetY] - [self hk_closeOffsetY]) * 0.5;if (viewY <= viewMinY) {return NO;}return YES;
}

当知道是展开还是收起后,就可以进行滑动了。这里我们做一个简单动画,使滑动看起来自然一些,这里除了需要改变ScrollViewcontentInset,还需要改变其contentOffset,因为NavBarTabBar移动了,ScrollView也要跟着一起移动。

[UIView animateWithDuration:0.2 animations:^{CGFloat navBarOffsetY = 0;if (opening) {//navBarOffsetY为NavBar从当前位置到展开滑动的距离navBarOffsetY = [self.navigationController.navigationBar hk_open];[self.tabBarController.tabBar hk_open];} else {//navBarOffsetY为NavBar从当前位置到收起滑动的距离navBarOffsetY = [self.navigationController.navigationBar hk_close];[self.tabBarController.tabBar hk_close];}//更新TableView的contentInset[self updateScrollViewInset];//根据NavBar的偏移量来滑动TableViewCGPoint contentOffset = self.tableView.contentOffset;contentOffset.y += navBarOffsetY;self.tableView.contentOffset = contentOffset;
}];
(5)在Push到其他页面,再Pop回来后,NavBar和TabBar显示正确

Push到其他页面之前,必须把NavBarTabBar都展开,不然在收起的状态Push到其他页面,NavBarTabBar都不见了。
这里就需要在- (void)viewWillDisappear:(BOOL)animated中将NavBarTabBar都展开。

还有一个地方需要注意:
Push到其他页面的时候,如果此时ScrollViewcontentInset不为(0,0,0,0)时,系统会自动将其置为(0,0,0,0),这样在Push后,还会走到之前页面ScrollViewscrollViewDidScroll:方法中,会导致NavBar消失。对于这种情况,就不应该让其继续走我们处理展开和收取NavBarTabBar的流程。
我们可以通过以下代码控制,当该UIViewController不是当前显示的UIViewController时,就不往下走了。

//在push到其他页面时候,还是会走该方法,这个时候不应该继续执行
if (!(self.isViewLoaded && self.view.window != nil)) {return;
}

到这里,映客首页的效果就实现好了!

Demo项目

该Demo项目地址:https://github.com/HustHank/YingKeHomeDemo

相关文章:

WinCE项目应用之车载导航

WinCE车载导航系统是我过去几年投入精力比较多的一个项目。我的主要工作内容是BSP的移植、硬件模块的调试和WinCE系统的深度定制。如TDA7415驱动、TDA7415均衡器、慧翰车载蓝牙模块、华为EM730的3G通信模块、四线电阻式触摸屏驱动的优化、3G拨号助手、LCD调试助手、WIFI模块AR6…

记录下,我们平时开发当中不得不知道的HTTP状态码

上面是我对博客园页面加载的时候&#xff0c;获取的AJAX读取资源的截图。 上述列表告诉我们了&#xff0c;返回的HTTP状态码&#xff0c;分为200&#xff08;正常&#xff09;&#xff0c;304&#xff08;不修改&#xff09;和同时返回的资源大小和完成时间等。 这个工具可以很…

rmd文件怎么转换html文件,提取.Rmd文件的html依赖项(包含htmlwidgets)

题我怎样才能创建一个将.Rmd文件(包含htmlwidgets代码)作为输入的函数,并输出一个包含其JavaScript / CSS依赖项的html文件&#xff1f;具体来说,当渲染为html时,临时文件rmarkdown为pandoc的–include-in-header参数生成.细节示例 – myfile.Rmd&#xff1a;This is some text…

教你实现GPUImage【OpenGL渲染原理】

原文出处&#xff1a; 袁峥Seemygo&#xff08;袁峥Seemygo&#xff09; 一、前言 本篇主要讲解GPUImage底层是如何渲染的,GPUImage底层使用的是OPENGL,操控GPU来实现屏幕展示 由于网上OpenGL实战资料特别少&#xff0c;官方文档对一些方法也是解释不清楚&#xff0c;避免广大…

构建之法阅读笔记02

在这次的阅读过程中我了解到了如何给别人提意见&#xff0c;给我最大的启发是乔布斯对其下属提意见的小故事&#xff0c;当其下属把iphone的图标都设计成了矩形的时候&#xff0c;乔布斯建议他把图标设计成带圆角的正方形&#xff0c;而其下属一开始却并没有接受乔的意见&#…

Windows Server 2008 R2 配置笔记,密码设置为任意长度,远程桌面终端连接数的设置...

图片显示不完全时&#xff0c;可在新标签页打开。 Windows Server 2008 R2 配置{ 安装企业版(Enterprise Editon)&#xff0c;因为企业版功能全面&#xff0c;并且比数据中心版更容易配置{ 各版本功能概述在版本概览页面。详细参数对比在版本概览页面右边有链接&…

html5图片灰度显示,HTML5 组件Canvas实现图像灰度化

HTML5发布已经有很长一段时间了&#xff0c;一直以来从来没有仔细的看过&#xff0c;过年刚来随便看看发现HTML5中的Canvas组件功能是如此的强大&#xff0c;不怪很多牛人预言Flash已死&#xff0c;死不死不是我要关心的&#xff0c;我关心的Canvas可以很轻松在网页中实现简单相…

SqlParameter参数方式操作数据库(存储过程)

访问数据库&#xff1a; View Code using System; using System.Data; using System.Configuration; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using Syst…

视频编解码之理论概述 和即时通信

前言 即时通讯应用中的实时音视频技术&#xff0c;几乎是IM开发中的最后一道高墙。原因在于&#xff1a;实时音视频技术 音视频处理技术 网络传输技术 的横向技术应用集合体&#xff0c;而公共互联网不是为了实时通信设计的。有关实时音视频开发时的技术难题请参见《音视频云…

图论:关于二分图的总结(转载)

二分图是这样一个图&#xff0c;它的顶点可以分类两个集合X和Y&#xff0c;所有的边关联在两个顶点中&#xff0c;恰好一个属于集合&#xff38;&#xff0c;另一个属于集合&#xff39;。 最大匹配&#xff1a;图中包含边数最多的匹配称为图的最大匹配。 完美匹配&#xff1a;…

动态加载的html没有js效果,JS利用html5实现loadding动态加载效果代码实例

51前端window.οnlοadfunction(){var Loading function (canvas, options) {this.canvas document.getElementById(canvas);this.options options;};Loading.prototype{constructor: Loading,show: function(){var canvas this.canvas,begin this.options.begin,old thi…

iOS 自动布局框架 – Masonry 详解

来源&#xff1a;伯乐在线 - 刘小壮 如有好文章投稿&#xff0c;请点击 → 这里了解详情 如需转载&#xff0c;发送「转载」二字查看说明 目前iOS开发中大多数页面都已经开始使用Interface Builder的方式进行UI开发了&#xff0c;但是在一些变化比较复杂的页面&#xff0c;还是…

GDC2016 Epic Games【Bullet Train】 新风格的VR-FPS的制作方法

追求“舒适”和“快感”的VR游戏设计方法http://game.watch.impress.co.jp/docs/news/20160318_749016.html【Bullet Train】演讲的状况在游戏的创造历史上&#xff0c;有那种决定性的创新&#xff0c;以及高完成度的作品&#xff0c;对于FPS风格来说&#xff0c;【DOOM】就是这…

例4-1和例4-2和例4-3

public class ComputerCircleArea{ public static void main(String args[]){ double radius; double area; radius163.16; area3.14*radius*radius; System.out.printf("半径是%5.3f的圆的面积:\n%5.3f\n",radius,area); }} class Circle{ double radius; doubl…

html中的两种标记,如何在html选项标记中实现两种不同的对齐?

下面是一个单空间js解决方案,与scott everden的jquery示例一起使用。我只在firefox中测试过,但这应该足够开始了。javascriptvar MIN_SPACES_BETWEEN_VALS 3;function mkOption(left, right, total){var str left;var spaces total - left.length - right.length;for(x 0;x…

html标签(2)--有序列表与无序列表

有一些内容形式&#xff0c;用div来实现非常麻烦&#xff0c;也不适合 例如一些表格形式 无序列表 ul 代表列表 li 代表列表中的项 list-style 控制列表的样式 有序列表 ol 代表列表 li 代表列表中的项 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN…

Swift3实现的绘制股票K线库, FastImageCache提升图片的加载和渲染速度,Chameleon颜色框架

代码1:用Swift3实现的绘制股票K线库 for iOS & macOS代码地址&#xff1a;网页链接代码2:FastImageCache是Path团队开发的一个开源库&#xff0c;用于提升图片的加载和渲染速度&#xff0c;让基于图片的列表滑动起来更顺畅。代码地址&#xff1a;网页链接代码3&#xff1a;…

传智播客还收费 兄弟会都是免费的

【传智播客还收费 兄弟会都是免费的 兄弟连兄弟会it开发培训 www.itxdh.net 企鹅群&#xff1a;499956522 高端人才培养就到【兄弟连兄弟会it开发培训】纯免费的高端IT人才培养】 传智播客&#xff0c;一个多么具有戏剧性的词眼&#xff0c;以前张孝祥老师建校的初衷就是为了让…

用计算机的英语造句process,process的用法总结大全

process的意思n. 过程,工序,做事方法,工艺流程vt. 加工,处理,审阅,审核vi. 列队行进adj. 经过特殊加工(或处理)的变形&#xff1a;过去式: processed&#xff1b; 现在分词&#xff1a;processing&#xff1b; 过去分词&#xff1a;processed&#xff1b;process用法process可以…

iOS进阶之页面性能优化

作者: hi_xgb 地址: http://www.jianshu.com/p/1b5cbf155b31 前言 在软件开发领域里经常能听到这样一句话&#xff0c;“过早的优化是万恶之源”&#xff0c;不要过早优化或者过度优化。我认为在编码过程中时刻注意性能影响是有必要的&#xff0c;但凡事都有个度&#xff0c;不…

LabelMe图像数据集下载

Download MATLAB Toolbox for the LabelMe Image Database 利用Matlab Toolbox工具箱下载图像库 一、下载Matlab Toolbox工具箱 1. Github repository We maintain the latest version of the toolbox on github. To pull the latest version, make sure that "git" …

win8计算机管理没有用户组,Win8右键计算机管理提示“该文件没有与之关联的程序”怎么办?...

最近有Win8用户反映&#xff0c;右键计算机管理的时候&#xff0c;出现提示“该文件没有与之关联的程序来执行该操作”&#xff0c;这让用户非常苦恼。那么&#xff0c;Win8右键计算机管理提示“该文件没有与之关联的程序”怎么办呢&#xff1f;下面&#xff0c;我们就一起往下…

Objective-C 自动生成文档工具:appledoc

来源&#xff1a;iOS_小松哥 www.jianshu.com/p/fd4d8d6b6177 如有好文章投稿&#xff0c;请点击 → 这里了解详情 由于最近琐事比较多&#xff0c;所以好久没有写文章了。今天我们聊一聊Objective-C自动生成文档。 做项目的人多了&#xff0c;就需要文档了。手工写文档是一件…

linux命令--提升

查看系统进程&#xff1a;top 查看磁盘空间&#xff1a; df -h 查询系统负载: uptime , 以下显示输入uptime的信息&#xff1a; 04:03:58 up 10 days, 13:19, 1 user, load average: 0.54, 0.40, 0.20 1.当前时间 04:03:58 2.系统已运行的时间 10 days, 13:19 3.前在线用户…

git 从远程主服务器当中创建新分支

现有版本; h20, h28&#xff0c;h26,i8 h28&#xff0c;h26,i8是从H20下面创建的。 需求: 从H28下面创建新分支继续开发。 思路&#xff1a; 所有代码均是放置到H20上仓库当中&#xff0c;首先下载H20完整仓库&#xff0c;也就是.git文件夹当中内容&#xff0c;其本质是一个ZIP…

涉密计算机用户账号设置审批表,北京邮电大学涉密计算机配置审批表.PDF

北京邮电大学涉密计算机配置审批表北京邮电大学涉密计算机配置审批表使用部门 品牌型号涉密计算机类型 ?台式机 ?便携机 资产编号用途 ?科研 ?办公 ?其他 配置日期硬盘序列号中央处理器硬盘容量CPU基本配置 内 存显示器品牌型号MAC 地址操作系统版本 操作系统安装时间放置…

Oracle 正则表达式

ORACLE中的支持正则表达式的函数主要有下面四个&#xff1a;1&#xff0c;REGEXP_LIKE &#xff1a;与LIKE的功能相似2&#xff0c;REGEXP_INSTR &#xff1a;与INSTR的功能相似3&#xff0c;REGEXP_SUBSTR &#xff1a;与SUBSTR的功能相似4&#xff0c;REGEXP_REPLACE &#x…

制作 Swift 和 Objective-C Mixed 的 Pod

来源&#xff1a;南栀倾寒 www.jianshu.com/p/c7623c31d77b 如有好文章投稿&#xff0c;请点击 → 这里了解详情 知识背景 What is CocoaPods&#xff08;https://guides.cocoapods.org/using/getting-started.html&#xff09; What did CocoaPods do&#xff1f;&#x…

SearchRequestBuilder常用方法说明

SearchRequestBuilder常用方法说明 (1) setIndices(String... indices)&#xff1a;上文中描述过&#xff0c;参数可为一个或多个字符串&#xff0c;表示要进行检索的index&#xff1b;(2) setTypes(String... types)&#xff1a;参数可为一个或多个字符串&#xff0c;表示要进…

计算机知识课后反思,计算机硬件和软件知识课后反思

计算机硬件和软件知识课后反思《计算机系统组成》—计算机硬件和软件知识一课是七年级信息技术中《信息技术基础》里的知识。在学习这之前&#xff0c;学生虽然都使用过计算机&#xff0c;但对于计算机的系统组成、主机内的硬件知识基本知之甚少。但是对这些知识学生又充满了好…