KIF API中文翻译(一)

UIAccessibility是在UIKit里的一个非正式协议,提供关于UI元素的辅助功能。这个信息能够通过VoiceOver和其他辅助科技帮助肢体障碍者用户与你的用户进行交互。
UIAccessibility所有属性的列表:

//控件的识别符,默认值为nil
accessibilityLabel

//操作后的提示
//是对控件执行操作后结果的简单描述,而不识别控件和操作。
//例如,包含电子邮件消息的表行的提示可能是“选择消息”,但不是“点击此行以选择消息”。
accessibilityHint:

//控件具体值
//当辅助功能元素具有静态标签和动态值, accessibilityValue为动态值
//如textfield控件的标示属性为accessibilityLabel,对应输入框的文本值属性为accessibilityValue
accessibilityValue

//控件语言属性
accessibilityLanguage

//控件的特性
//控件的种类信息,使用了UIAccessibiltyTraits为值的位掩码,这个属性可以由文档里指定好几个属性结合而成。如自定义按钮显示一张图片,点击播放声音,则控件的特征为“按钮”,“图片”,“播放声音”。
accessibilityTraits

//控件的位置信息
//具体指的是在屏幕上的大小和位置信息
accessibilityFrame

//控件激活点
//默认为accessibilityFrame中心点,但也有列外如长按删除应用,控件激活点为图标左上角的圆圈叉
accessibilityActivationPoint

//控件隐藏
//使用此属性来隐藏控件。在这种情况下,隐藏的控件可能在屏幕上可见,但它们无法进行操作。
accessibilityElementsHidden

//控件的组属性
//默认值为no,若为yes VoiceOver将忽略该该控件,且包括该控件所在视图中的其他控件
accessibilityViewIsModal

控件获取

等待控件显示(一)
相对通用的方法,衍生出三种api等待目标控件出现,返回目标的UIView对象
定位目标对象参数:
label(accessibilityLabel):控件的辅助功能标示
traits(accessibilityTraits):控件的辅助功能特性
value(accessibilityValue):控件的文本值,如textfield文本输入满足一定条件才符合条件
返回参数:
UIView:控件对象指针

- (UIView *)waitForViewWithAccessibilityLabel:(NSString *)label;
- (UIView *)waitForViewWithAccessibilityLabel:(NSString *)label traits:(UIAccessibilityTraits)traits;
- (UIView *)waitForViewWithAccessibilityLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits;

等待控件显示(二)
与等待控件显示(一)基本一致,区别在于添加“可点击”的约束

- (UIView *)waitForTappableViewWithAccessibilityLabel:(NSString *)label;
- (UIView *)waitForTappableViewWithAccessibilityLabel:(NSString *)label traits:(UIAccessibilityTraits)traits;
- (UIView *)waitForTappableViewWithAccessibilityLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits;

等待控件显示(三)
通过传址,将符合条件的控件对象进行赋值。
参数:
赋值参数
element(UIAccessibilityElement **):传址,将符合条件的对象存储,类型为UIAccessibilityElement
view(out UIView **):传址,将符合条件的对象存储,类型为UIView
条件参数
label(accessibilityLabel):控件的辅助功能标示
fromView(UIView):遍历符合条件的起始视图
traits(UIAccessibilityTraits):控件的辅助功能特性
mustBeTappable(BOOL):是否可以点击

- (void)waitForAccessibilityElement:(UIAccessibilityElement **)element view:(out UIView **)view withLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits tappable:(BOOL)mustBeTappable;
- (void)waitForAccessibilityElement:(UIAccessibilityElement **)element view:(out UIView **)view withLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits fromRootView:(UIView *)fromView tappable:(BOOL)mustBeTappable;

等待控件显示(四)
利用逻辑约束(NSPredicate)等待符合条件的控件,与等待控件显示(三)类型,差别是使用逻辑约束寻找目标控件
参数:
赋值参数
element(UIAccessibilityElement **):传址,将符合条件的对象存储,类型为UIAccessibilityElement
view(out UIView **):传址,将符合条件的对象存储,类型为UIView
条件参数
predicate(NSPredicate *):逻辑约束
identifier(NSString *):逻辑约束NSString表达,函数内部会将其转为为NSPredicate对象
mustBeTappable(BOOL):是否可点击作为约束条件

- (void)waitForAccessibilityElement:(UIAccessibilityElement **)element view:(out UIView **)view withElementMatchingPredicate:(NSPredicate *)predicate tappable:(BOOL)mustBeTappable;
- (void)waitForAccessibilityElement:(UIAccessibilityElement **)element view:(out UIView **)view withIdentifier:(NSString *)identifier tappable:(BOOL)mustBeTappable;
- (void)waitForAccessibilityElement:(UIAccessibilityElement **)element view:(out UIView **)view withIdentifier:(NSString *)identifier fromRootView:(UIView *)fromView tappable:(BOOL)mustBeTappable;

等待控件消失

与等待控件显示API的传参一致,差别是等待控件消失

- (void)waitForAbsenceOfViewWithAccessibilityLabel:(NSString *)label;
- (void)waitForAbsenceOfViewWithAccessibilityLabel:(NSString *)label traits:(UIAccessibilityTraits)traits;
- (void)waitForAbsenceOfViewWithAccessibilityLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits;
- (void)waitForAbsenceOfViewWithElementMatchingPredicate:(NSPredicate *)predicate;

手势操作

点击

//方式一:
//通过accessibilityLabel寻找并点击目标控件
//steup1.等待符合条件的控件(accessibilityLabel标示,accessibilityTraits特性,accessibilityValue文本值)
//steup2.点击符合条件的控件
- (void)tapViewWithAccessibilityLabel:(NSString *)label;
- (void)tapViewWithAccessibilityLabel:(NSString *)label traits:(UIAccessibilityTraits)traits;
- (void)tapViewWithAccessibilityLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits;

//方式二:
//点击指定视图view中的UIAccessibilityElement对象
element(UIAccessibilityElement *):UIAccessibilityElement对象
view(UIView *):视图
- (void)tapAccessibilityElement:(UIAccessibilityElement *)element inView:(UIView *)view;

//方式三:点击屏幕某个坐标
- (void)tapScreenAtPoint:(CGPoint)screenPoint;

长按

//方式一:
//通过accessibilityLabel寻找并点击目标控件
//steup1.等待符合条件的控件(accessibilityLabel标示,accessibilityTraits特性,accessibilityValue文本值)
//steup2.长按符合条件的控件,长按时间为duration
- (void)longPressViewWithAccessibilityLabel:(NSString *)label duration:(NSTimeInterval)duration;
- (void)longPressViewWithAccessibilityLabel:(NSString *)label value:(NSString *)value duration:(NSTimeInterval)duration;
- (void)longPressViewWithAccessibilityLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits duration:(NSTimeInterval)duration;

//方式二:
//长按指定视图view中的UIAccessibilityElement对象,长按时间为duration
- (void)longPressAccessibilityElement:(UIAccessibilityElement *)element inView:(UIView *)view duration:(NSTimeInterval)duration;

滑动

//方式一:
//根据accessibiltyLabel寻找符合条件的控件,并滑动
//horizontalFraction:水平滑动距离
//verticalFraction:垂直滑动距离
- (void)scrollViewWithAccessibilityLabel:(NSString *)label byFractionOfSizeHorizontal:(CGFloat)horizontalFraction vertical:(CGFloat)verticalFraction

//方式二:
//根据逻辑约束(identifier)寻找符合条件的控件,并滑动
//horizontalFraction:水平滑动距离
//verticalFraction:垂直滑动距离
- (void)scrollViewWithAccessibilityIdentifier:(NSString *)identifier byFractionOfSizeHorizontal:(CGFloat)horizontalFraction vertical:(CGFloat)verticalFraction

//方式三:
//滑动指定视图view中的UIAccessibilityElement对象
//horizontalFraction:水平滑动距离
//verticalFraction:垂直滑动距离
- (void)scrollAccessibilityElement:(UIAccessibilityElement *)element inView:(UIView *)viewToScroll byFractionOfSizeHorizontal:(CGFloat)horizontalFraction vertical:(CGFloat)verticalFraction;

轻扫

//方式一
//steup1.寻找符合条件的目标控件(accessibilityLabel标示,accessibilityTraits特性,accessibilityValue文本值)
//steup2.根据设定的方向值,轻扫目标控件
- (void)swipeViewWithAccessibilityLabel:(NSString *)label inDirection:(KIFSwipeDirection)direction;
- (void)swipeViewWithAccessibilityLabel:(NSString *)label value:(NSString *)value inDirection:(KIFSwipeDirection)direction;
- (void)swipeViewWithAccessibilityLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits inDirection:(KIFSwipeDirection)direction;

//方式二
//轻扫指定视图view中的UIAccessibilityElement对象,方向有direction指定
- (void)swipeAccessibilityElement:(UIAccessibilityElement *)element inView:(UIView *)viewToSwipe inDirection:(KIFSwipeDirection)direction;

下拉刷新

//方式一
//steup1.寻找符合条件的目标控件(accessibilityLabel标示,accessibilityValue文本值)
//steup2.下拉目标控件,下拉持续时间由pullDownDuration设定
- (void)pullToRefreshViewWithAccessibilityLabel:(NSString *)label pullDownDuration:(KIFPullToRefreshTiming) pullDownDuration;
- (void)pullToRefreshViewWithAccessibilityLabel:(NSString *)label value:(NSString *)value;

//方式二
//下拉刷新指定视图view中的UIAccessibilityElement对象,下拉持续时间由pullDownDuration设定
- (void)pullToRefreshAccessibilityElement:(UIAccessibilityElement *)element inView:(UIView *)viewToSwipe pullDownDuration:(KIFPullToRefreshTiming) pullDownDuration;

特殊控件操作

文本输入操作

//方式一
//对第一响应的控件输入文本,对于UIWebView/无辅助功能标示的控件较为有用
//对默认第一响应进行输入
//text=@“\b”表明删除一个字符,text=@“\b\b”表示删除两个字符,以此类推
- (void)enterTextIntoCurrentFirstResponder:(NSString *)text;
//判断fallbackView是否是可输入控件(UITextField,UITextView,UISearchBar),若是则输入文本


//方式二
//对指定视图中的UIAccessibilityElement输入文本,element和view用于定位点击操作,使得view作为第一响应可以输入文本
//text:输入的文本 
//expectedResult:函数内部会拿该值去检测完成输入后的文本是否完全匹配expectedResult值
//类似断言,即调用- (void)expectView:(UIView *)view toContainText:(NSString *)expectedResult方法
- (void)enterText:(NSString *)text intoElement:(UIAccessibilityElement *)element inView:(UIView *)view expectedResult:(NSString *)expectedResult;
- (void)expectView:(UIView *)view toContainText:(NSString *)expectedResult;

//方式三
//与方式二类事,不同在于寻找控件的条件不同(accessibilityLabel,accessibilityTraits)
- (void)enterText:(NSString *)text intoViewWithAccessibilityLabel:(NSString *)label;
- (void)enterText:(NSString *)text intoViewWithAccessibilityLabel:(NSString *)label traits:(UIAccessibilityTraits)traits expectedResult:(NSString *)expectedResult;

文案删除操作

//方式一
//清除第一响应的文本
- (void)clearTextFromFirstResponder;

//方式二
//清除符合条件的控件文案
- (void)clearTextFromViewWithAccessibilityLabel:(NSString *)label;
- (void)clearTextFromViewWithAccessibilityLabel:(NSString *)label traits:(UIAccessibilityTraits)traits;

//方式三
//与方式二一致,寻找条件不一致
- (void)clearTextFromElement:(UIAccessibilityElement *)element inView:(UIView *)view;


//文案删除后再输入指定文案
- (void)clearTextFromAndThenEnterTextIntoCurrentFirstResponder:(NSString *)text;
- (void)clearTextFromAndThenEnterText:(NSString *)text intoViewWithAccessibilityLabel:(NSString *)label;
- (void)clearTextFromAndThenEnterText:(NSString *)text intoViewWithAccessibilityLabel:(NSString *)label traits:(UIAccessibilityTraits)traits expectedResult:(NSString *)expectedResult;

UITableView

//点击
//TableView中的指定cell
//参数:
//indexPath(NSIndexPath *):cell的索引值,-1为最后一个cell
//搜索参数:AccessibilityLabel(辅助控件标示)/AccessibilityIdentifier(逻辑约束)/UITableView(控件指针)
- (void)tapRowInTableViewWithAccessibilityLabel:(NSString *)tableViewLabel atIndexPath:(NSIndexPath *)indexPath
- (void)tapRowAtIndexPath:(NSIndexPath *)indexPath inTableViewWithAccessibilityIdentifier:(NSString *)identifier
- (void)tapRowAtIndexPath:(NSIndexPath *)indexPath inTableView:(UITableView *)tableView;

//等待
//TableView中的指定cell出现
//参数
//indexPath(NSIndexPath *):cell的索引值,-1为最后一个cell
//atPosition(UITableViewScrollPosition):指定cell移动到的位置,如TableView显示的底部,中部,顶部
//搜索条件:AccessibilityIdentifier(逻辑约束)/UITableView(控件指针)
- (UITableViewCell *)waitForCellAtIndexPath:(NSIndexPath *)indexPath inTableViewWithAccessibilityIdentifier:(NSString *)identifier;
- (UITableViewCell *)waitForCellAtIndexPath:(NSIndexPath *)indexPath inTableViewWithAccessibilityIdentifier:(NSString *)identifier atPosition:(UITableViewScrollPosition)position;
- (UITableViewCell *)waitForCellAtIndexPath:(NSIndexPath *)indexPath inTableView:(UITableView *)tableView;
- (UITableViewCell *)waitForCellAtIndexPath:(NSIndexPath *)indexPath inTableView:(UITableView *)tableView atPosition:(UITableViewScrollPosition)position;

//编辑模式下,移动table cell
//TableView的cell
//参数:
//sourceIndexPath:滑动的起始索引
//destinationIndexPath:滑动的终止索引
//搜索条件:AccessibilityIdentifier(逻辑约束)/UITableView(控件指针)
- (void)moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath inTableViewWithAccessibilityIdentifier:(NSString *)identifier;
- (void)moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath inTableView:(UITableView *)tableView;

//其他
//向某个方向拖拽指定cell
- (void)swipeRowAtIndexPath:(NSIndexPath *)indexPath inTableView:(UITableView *)tableView inDirection:(KIFSwipeDirection)direction;
//等待指定cell出现删除状态
//cell(UITableViewCell*):cell对象指针
- (void)waitForDeleteStateForCell:(UITableViewCell*)cell;
- (void)waitForDeleteStateForCellAtIndexPath:(NSIndexPath*)indexPath inTableView:(UITableView*)tableView;

CollectionView

//与TableView的使用基本一致
- (void)tapItemAtIndexPath:(NSIndexPath *)indexPath inCollectionViewWithAccessibilityIdentifier:(NSString *)identifier;
- (void)tapItemAtIndexPath:(NSIndexPath *)indexPath inCollectionView:(UICollectionView *)collectionView;
- (UICollectionViewCell *)waitForCellAtIndexPath:(NSIndexPath *)indexPath inCollectionView:(UICollectionView *)collectionView;
- (UICollectionViewCell *)waitForCellAtIndexPath:(NSIndexPath *)indexPath inCollectionViewWithAccessibilityIdentifier:(NSString *)identifier;

UIPickerView

//选择对应UIPickerView的单元
//参数:
//title(NSString *):单元的标题
//component:UIPickerView对应的列
//searchOrder(KIFPickerSearchOrder):滑动UIPickerView单元的顺序(4种,具体参考源码)
- (void)selectPickerViewRowWithTitle:(NSString *)title;
- (void)selectPickerViewRowWithTitle:(NSString *)title inComponent:(NSInteger)component;
- (void)selectPickerViewRowWithTitle:(NSString *)title inComponent:(NSInteger)component withSearchOrder:(KIFPickerSearchOrder)searchOrder;

UIDatePicker

//与UIPickerView基本操作一致,具体可以参考源码
- (void)selectDatePickerValue:(NSArray *)datePickerColumnValues;
- (void)selectDatePickerValue:(NSArray *)datePickerColumnValues withSearchOrder:(KIFPickerSearchOrder)searchOrder;

Switch

//开关控件
//参数:
//switchIsOn:控制开还是关
//搜索参数:AccessibilityLabel辅助功能标示/UIAccessibilityElement+ switchView
- (void)setOn:(BOOL)switchIsOn forSwitchWithAccessibilityLabel:(NSString *)label;
- (void)setSwitch:(UISwitch *)switchView element:(UIAccessibilityElement *)element On:(BOOL)switchIsOn;

Slider

//滑块控件
//value:滑动程度
//搜索参数:AccessibilityLabel辅助功能标示/UISlider 对象指针控件
- (void)setValue:(float)value forSliderWithAccessibilityLabel:(NSString *)label;
- (void)setValue:(float)value forSlider:(UISlider *)slider;

Stepper

- (void)tapStepperWithAccessibilityLabel:(NSString *)accessibilityLabel increment:(KIFStepperDirection)stepperDirection;
- (void)tapStepperWithAccessibilityElement:(UIAccessibilityElement *)element increment:(KIFStepperDirection)stepperDirection inView:(UIView *)view;

系统性操作

动画相关

//等待动画消失
//参数:
//timeout(NSTimeInterval):等待超时时间
//stabilizationTime(NSTimeInterval):睡眠时间,一般睡眠时间内不会探测动画是否结束
- (void)waitForAnimationsToFinish;
- (void)waitForAnimationsToFinishWithTimeout:(NSTimeInterval)timeout;
- (void)waitForAnimationsToFinishWithTimeout:(NSTimeInterval)timeout stabilizationTime:(NSTimeInterval)stabilizationTime;

键盘

//等待键盘出现
- (void)waitForSoftwareKeyboard;
//等待键盘出现,且可输入
- (void)waitForKeyInputReady;
//等待键盘消失
- (void)waitForAbsenceOfSoftwareKeyboard;

相册

//选择指定相册的指定位置图片
//参数:
//albumName:相册名
//row:行
//column:列
- (void)choosePhotoInAlbum:(NSString *)albumName atRow:(NSInteger)row column:(NSInteger)column;

第一响应

等待目标控件活动第一响应
- (void)waitForFirstResponderWithAccessibilityLabel:(NSString *)label;
- (void)waitForFirstResponderWithAccessibilityLabel:(NSString *)label traits:(UIAccessibilityTraits)traits;

通知/URL的监听

//监听某个对象接受的指定通知
//参数:
//name:通知名称
//object:监听的对象
//block:监听后需要执行的代码块
- (NSNotification *)waitForNotificationName:(NSString*)name object:(id)object;
- (NSNotification *)waitForNotificationName:(NSString *)name object:(id)object whileExecutingBlock:(void(^)())block;

//监听指定的URL访问
//基本原理是通过hock openURL来实现
//参数
//URLString:监听的目标url
//block:监听到后需要执行的代码块
//returnValue:标记位,hock函数是否打开
- (void)waitForApplicationToOpenURL:(NSString *)URLString whileExecutingBlock:(void(^)())block returning:(BOOL)returnValue;
- (void)waitForApplicationToOpenAnyURLWhileExecutingBlock:(void(^)())block returning:(BOOL)returnValue;
//与上述函数一致,差异在于传递的URLScheme(通过配置可以在浏览器打开应用)
- (void)waitForApplicationToOpenURLWithScheme:(NSString *)URLScheme whileExecutingBlock:(void (^)())block returning:(BOOL)returnValue;

其他

//在屏幕上关闭一个popover的弹窗
- (void)dismissPopover;

//点击status bar
- (void)tapStatusBar;

//模拟home键点击
- (void)deactivateAppForDuration:(NSTimeInterval)duration
// 关闭系统弹窗,关闭成功返回ture,反之返回false
- (BOOL)acknowledgeSystemAlert;

//设置指定视图的文案
- (void)setText:(NSString *)text intoViewWithAccessibilityLabel:(NSString *)label;

//获取指定视图的文案
- (NSString *)textFromView:(UIView *)view;

//截屏
- (void)captureScreenshotWithDescription:(NSString *)description;

//模拟内存报警
- (void)simulateMemoryWarning;

//模拟横竖屏切换
- (void)simulateDeviceRotationToOrientation:(UIDeviceOrientation)orientation;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 222,183评论 6 516
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,850评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,766评论 0 361
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,854评论 1 299
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,871评论 6 398
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,457评论 1 311
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,999评论 3 422
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,914评论 0 277
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,465评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,543评论 3 342
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,675评论 1 353
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,354评论 5 351
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,029评论 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,514评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,616评论 1 274
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 49,091评论 3 378
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,685评论 2 360

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,304评论 25 707
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,121评论 4 61
  • 第一次是在去保定领新农合的补助的时候,由于拖的时间久了,本来以为需要的材料都准备好了,谁知到了那开始报销的时候才被...
    安新小子阅读 173评论 0 0
  • Genymotion 大家都知道是个很不错的android模拟器,有几个特点,系统更新快,启动速度和快 但是服务器...
    卢桂林阅读 20,596评论 4 11
  • 半块月亮 勉强的撑破了夜色 月光,将孤独满世界的倾泻 肥沃的水田,再也留不住 年轻人的梦想 静寂的乡村,荒弃的田野...
    淘金石阅读 466评论 16 26