UITableView

IOS中UITableView使用總結(jié)

一命雀、初始化方法

- (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style;

這個方法初始化表視圖的frame大小并且設(shè)置一個風(fēng)格,UITableViewStyle是一個枚舉遣总,如下:

typedefNS_ENUM(NSInteger,?UITableViewStyle)?{

UITableViewStylePlain,//?標(biāo)準(zhǔn)的表視圖風(fēng)格

UITableViewStyleGrouped//?分組的表視圖風(fēng)格

};

二盏混、常用屬性

獲取表視圖的風(fēng)格(只讀屬性)

@property(nonatomic,readonly)UITableViewStylestyle;

設(shè)置表示圖代理和數(shù)據(jù)源代理(代理方法后面討論)

@property(nonatomic,assign)id dataSource;

@property(nonatomic,assign)id ? delegate;

設(shè)置表示圖的行高(默認為44)

@property(nonatomic)CGFloatrowHeight;

設(shè)置分區(qū)的頭視圖高度和尾視圖高度(當(dāng)代理方法沒有實現(xiàn)時才有效)

@property(nonatomic)CGFloatsectionHeaderHeight;

@property(nonatomic)CGFloatsectionFooterHeight;

設(shè)置一個行高的估計值(默認為0构眯,表示沒有估計,7.0之后可用)

@property(nonatomic)CGFloatestimatedRowHeight;

注意:這個屬性官方的解釋是如果你的tableView的行高是可變的,那么設(shè)計一個估計高度可以加快代碼的運行效率丰捷。

下面這兩個屬性和上面相似忠烛,分別設(shè)置分區(qū)頭視圖和尾視圖的估計高度(7.0之后可用)

@property(nonatomic)CGFloatestimatedSectionHeaderHeight;@property(nonatomic)CGFloatestimatedSectionFooterHeight;

設(shè)置分割線的位置

@property(nonatomic)UIEdgeInsetsseparatorInset;

如果細心属提,你可能會發(fā)現(xiàn)系統(tǒng)默認的tableView的分割線左端并沒有頂?shù)竭呇亍Mㄟ^這個屬性美尸,可以手動設(shè)置分割線的位置偏移冤议,比如你向讓tableView的分割線只顯示右半邊,可以如下設(shè)置:

UITableView?*?tab?=?[[UITableView?alloc]initWithFrame:self.view.frame?style:UITableViewStylePlain];

tab.separatorInset=UIEdgeInsetsMake(0,?tab.frame.size.width/2,?0,0);

設(shè)置tableView背景view視圖

@property(nonatomic,readwrite,retain)UIView*backgroundView;

三师坎、常用方法詳解

重載tableView

- (void)reloadData;

重載索引欄

- (void)reloadSectionIndexTitles;

這個方法常用語新加或者刪除了索引類別而無需刷新整個表視圖的情況下恕酸。

獲取分區(qū)數(shù)

- (NSInteger)numberOfSections;

根據(jù)分區(qū)獲取行數(shù)

- (NSInteger)numberOfRowsInSection:(NSInteger)section;

獲取分區(qū)的大小(包括頭視圖,所有行和尾視圖)

- (CGRect)rectForSection:(NSInteger)section;

根據(jù)分區(qū)分別獲取頭視圖胯陋,尾視圖和行的高度

- (CGRect)rectForHeaderInSection:(NSInteger)section;

- (CGRect)rectForFooterInSection:(NSInteger)section;

- (CGRect)rectForRowAtIndexPath:(NSIndexPath*)indexPath;

獲取某個點在tableView中的位置信息

- (NSIndexPath*)indexPathForRowAtPoint:(CGPoint)point;

獲取某個cell在tableView中的位置信息

- (NSIndexPath*)indexPathForCell:(UITableViewCell*)cell;

根據(jù)一個矩形范圍返回一個信息數(shù)組蕊温,數(shù)組中是每一行row的位置信息

- (NSArray*)indexPathsForRowsInRect:(CGRect)rect;

通過位置路徑獲取cell

- (UITableViewCell*)cellForRowAtIndexPath:(NSIndexPath*)indexPath;

獲取所有可見的cell

- (NSArray*)visibleCells;

獲取所有可見行的位置信息

- (NSArray*)indexPathsForVisibleRows;

根據(jù)分區(qū)獲取頭視圖

- (UITableViewHeaderFooterView*)headerViewForSection:(NSInteger)section;

根據(jù)分區(qū)獲取尾視圖

- (UITableViewHeaderFooterView*)footerViewForSection:(NSInteger)section;

使表示圖定位到某一位置(行)

- (void)scrollToRowAtIndexPath:(NSIndexPath*)indexPath atScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated;

注意:indexPah參數(shù)是定位的位置,決定于分區(qū)和行號遏乔。animated參數(shù)決定是否有動畫义矛。scrollPosition參數(shù)決定定位的相對位置,它使一個枚舉按灶,如下:

typedefNS_ENUM(NSInteger,?UITableViewScrollPosition)?{

UITableViewScrollPositionNone,//同UITableViewScrollPositionTop

UITableViewScrollPositionTop,//定位完成后症革,將定位的行顯示在tableView的頂部

UITableViewScrollPositionMiddle,//定位完成后筐咧,將定位的行顯示在tableView的中間

UITableViewScrollPositionBottom//定位完成后鸯旁,將定位的行顯示在tableView最下面

};

使表示圖定位到選中行

- (void)scrollToNearestSelectedRowAtScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated;

這個函數(shù)與上面的非常相似,只是它是將表示圖定位到選中的行量蕊。

四铺罢、tableView操作刷新塊的應(yīng)用

在介紹動畫塊之前,我們先看幾個函數(shù):

插入分區(qū)

- (void)insertSections:(NSIndexSet*)sections withRowAnimation:(UITableViewRowAnimation)animation;

animation參數(shù)是一個枚舉残炮,枚舉的動畫類型如下

typedefNS_ENUM(NSInteger,?UITableViewRowAnimation)?{

UITableViewRowAnimationFade,//淡入淡出

UITableViewRowAnimationRight,//從右滑入

UITableViewRowAnimationLeft,//從左滑入

UITableViewRowAnimationTop,//從上滑入

UITableViewRowAnimationBottom,//從下滑入

UITableViewRowAnimationNone,//沒有動畫

UITableViewRowAnimationMiddle,

UITableViewRowAnimationAutomatic?=?100//?自動選擇合適的動畫

};

刪除分區(qū)

- (void)deleteSections:(NSIndexSet*)sections withRowAnimation:(UITableViewRowAnimation)animation;

重載一個分區(qū)

- (void)reloadSections:(NSIndexSet*)sections withRowAnimation:(UITableViewRowAnimation)animation ;

移動一個分區(qū)

- (void)moveSection:(NSInteger)section toSection:(NSInteger)newSection;

插入一些行

- (void)insertRowsAtIndexPaths:(NSArray*)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;

刪除一些行

- (void)deleteRowsAtIndexPaths:(NSArray*)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;

重載一些行

- (void)reloadRowsAtIndexPaths:(NSArray*)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;

移動某行

- (void)moveRowAtIndexPath:(NSIndexPath*)indexPath toIndexPath:(NSIndexPath*)newIndexPath;

了解了上面幾個函數(shù)韭赘,我們來看什么是操作刷新塊:

當(dāng)我們調(diào)用的上面的函數(shù)時,tableView會立刻調(diào)用代理方法進行刷新势就,如果其中我們所做的操作是刪除某行泉瞻,而然數(shù)據(jù)源數(shù)組我們可能并沒有刷新,程序就會崩潰掉苞冯,原因是代理返回的信息和我們刪除后不符袖牙。

IOS為我們提供了下面兩個函數(shù)解決這個問題:

開始塊標(biāo)志

- (void)beginUpdates;

結(jié)束快標(biāo)志

- (void)endUpdates;

我們可以將我們要做的操作全部寫在這個塊中,那么舅锄,只有當(dāng)程序執(zhí)行到結(jié)束快標(biāo)志后鞭达,才會調(diào)用代理刷新方法。代碼示例如下:

[tab?beginUpdates];

[tab?deleteRowsAtIndexPaths:@[[NSIndexPath?indexPathForRow:1?inSection:0]]?withRowAnimation:UITableViewRowAnimationLeft];

[dataArray?removeObjectAtIndex:1];

[tab?endUpdates];

注意:不要在這個塊中調(diào)用reloadData這個方法,它會使動畫失效畴蹭。

五坦仍、tableView的編輯操作

設(shè)置是否是編輯狀態(tài)(編輯狀態(tài)下的cell左邊會出現(xiàn)一個減號,點擊右邊會劃出刪除按鈕)

@property(nonatomic,getter=isEditing)BOOLediting;

- (void)setEditing:(BOOL)editing animated:(BOOL)animated;

設(shè)置cell是否可以被選中(默認為YES)

@property(nonatomic)BOOLallowsSelection;

設(shè)置cell編輯模式下是否可以被選中

@property(nonatomic)BOOLallowsSelectionDuringEditing;

設(shè)置是否支持多選

@property(nonatomic)BOOLallowsMultipleSelection;

設(shè)置編輯模式下是否支持多選

@property(nonatomic)BOOLallowsMultipleSelectionDuringEditing;

六叨襟、選中cell的相關(guān)操作

獲取選中cell的位置信息

- (NSIndexPath*)indexPathForSelectedRow;

獲取多選cell的位置信息

- (NSArray*)indexPathsForSelectedRows;

代碼手動選中與取消選中某行

- (void)selectRowAtIndexPath:(NSIndexPath*)indexPath animated:(BOOL)animated scrollPosition:(UITableViewScrollPosition)scrollPosition;

- (void)deselectRowAtIndexPath:(NSIndexPath*)indexPath animated:(BOOL)animated;

注意:這兩個方法將不會回調(diào)代理中的方法繁扎。

七、tableView附件的相關(guān)方法

設(shè)置索引欄最小顯示行數(shù)

@property(nonatomic)NSIntegersectionIndexMinimumDisplayRowCount;

設(shè)置索引欄字體顏色

@property(nonatomic,retain)UIColor*sectionIndexColor;

設(shè)置索引欄背景顏色

@property(nonatomic,retain)UIColor*sectionIndexBackgroundColor;

設(shè)置索引欄被選中時的顏色

@property(nonatomic,retain)UIColor*sectionIndexTrackingBackgroundColor;

設(shè)置分割線的風(fēng)格

@property(nonatomic)UITableViewCellSeparatorStyleseparatorStyle;

這個風(fēng)格是一個枚舉芹啥,如下:

typedefNS_ENUM(NSInteger,?UITableViewCellSeparatorStyle)?{

UITableViewCellSeparatorStyleNone,//無線

UITableViewCellSeparatorStyleSingleLine,//有線

UITableViewCellSeparatorStyleSingleLineEtched

};

設(shè)置分割線顏色

@property(nonatomic,retain)UIColor*separatorColor;

設(shè)置分割線毛玻璃效果(IOS8之后可用)

@property(nonatomic,copy)UIVisualEffect*separatorEffect;

注意:這個屬性是IOS8之后新的锻离。

設(shè)置tableView頭視圖

@property(nonatomic,retain)UIView*tableHeaderView;

設(shè)置tableView尾視圖

@property(nonatomic,retain)UIView*tableFooterView;

從復(fù)用池中取cell

- (id)dequeueReusableCellWithIdentifier:(NSString*)identifier;

獲取一個已注冊的cell

- (id)dequeueReusableCellWithIdentifier:(NSString*)identifier forIndexPath:(NSIndexPath*)indexPath

從復(fù)用池獲取頭視圖或尾視圖

- (id)dequeueReusableHeaderFooterViewWithIdentifier:(NSString*)identifier;

通過xib文件注冊cell

- (void)registerNib:(UINib*)nib forCellReuseIdentifier:(NSString*)identifier;

通過OC類注冊cell

- (void)registerClass:(Class)cellClass forCellReuseIdentifier:(NSString*)identifier

上面兩個方法是IOS6之后的方法。

通過xib文件和OC類獲取注冊頭視圖和尾視圖

- (void)registerNib:(UINib*)nib forHeaderFooterViewReuseIdentifier:(NSString*)identifier;

- (void)registerClass:(Class)aClass forHeaderFooterViewReuseIdentifier:(NSString*)


二墓怀、UITableViewDataSourc(數(shù)據(jù)源代理)

1汽纠、必須實現(xiàn)的回調(diào)方法

返回每個分區(qū)的行數(shù)

- (NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section;

返回每一行的cell

- (NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section;

2、可選實現(xiàn)的方法

返回分區(qū)數(shù)(默認為1)

- (NSInteger)numberOfSectionsInTableView:(UITableView*)tableView;

返回每個分區(qū)頭部的標(biāo)題

- (NSString*)tableView:(UITableView*)tableView titleForHeaderInSection:(NSInteger)section;

返回每個分區(qū)的尾部標(biāo)題

- (NSString*)tableView:(UITableView*)tableView titleForFooterInSection:(NSInteger)section;

設(shè)置某行是否可編輯

- (BOOL)tableView:(UITableView*)tableView canEditRowAtIndexPath:(NSIndexPath*)indexPath;

設(shè)置某行是否可以被移動

- (BOOL)tableView:(UITableView*)tableView canMoveRowAtIndexPath:(NSIndexPath*)indexPath;

設(shè)置索引欄標(biāo)題數(shù)組(實現(xiàn)這個方法傀履,會在tableView右邊顯示每個分區(qū)的索引)

- (NSArray*)sectionIndexTitlesForTableView:(UITableView*)tableView;

設(shè)置索引欄標(biāo)題對應(yīng)的分區(qū)

- (NSInteger)tableView:(UITableView*)tableView sectionForSectionIndexTitle:(NSString*)title atIndex:(NSInteger)index

tableView接受編輯時調(diào)用的方法

- (void)tableView:(UITableView*)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath*)indexPath;

這個方法中的editingStyle參數(shù)是一個枚舉虱朵,代表了cell被編輯的模式,如下:

typedefNS_ENUM(NSInteger,?UITableViewCellEditingStyle)?{

UITableViewCellEditingStyleNone,//沒有編輯操作

UITableViewCellEditingStyleDelete,//刪除操作

UITableViewCellEditingStyleInsert//插入操作

};

tableView的cell被移動時調(diào)用的方法

- (void)tableView:(UITableView*)tableView moveRowAtIndexPath:(NSIndexPath*)sourceIndexPath toIndexPath:(NSIndexPath*)destinationIndexPath;

三钓账、UITableViewDelegate(tableView代理)

cell將要顯示時調(diào)用的方法

- (void)tableView:(UITableView*)tableView willDisplayCell:(UITableViewCell*)cell forRowAtIndexPath:(NSIndexPath*)indexPath;

頭視圖將要顯示時調(diào)用的方法

- (void)tableView:(UITableView*)tableView willDisplayHeaderView:(UIView*)view forSection:(NSInteger)section;

尾視圖將要顯示時調(diào)用的方法

- (void)tableView:(UITableView*)tableView willDisplayFooterView:(UIView*)view forSection:(NSInteger)section;

和上面的方法對應(yīng)碴犬,這三個方法分別是cell,頭視圖梆暮,尾視圖已經(jīng)顯示時調(diào)用的方法

- (void)tableView:(UITableView*)tableView didEndDisplayingCell:(UITableViewCell*)cell forRowAtIndexPath:(NSIndexPath*)indexPath;

- (void)tableView:(UITableView*)tableView didEndDisplayingHeaderView:(UIView*)view forSection:(NSInteger)section;

- (void)tableView:(UITableView*)tableView didEndDisplayingFooterView:(UIView*)view forSection:(NSInteger)section;

設(shè)置行高服协,頭視圖高度和尾視圖高度的方法

- (CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath;

- (CGFloat)tableView:(UITableView*)tableView heightForHeaderInSection:(NSInteger)section;

- (CGFloat)tableView:(UITableView*)tableView heightForFooterInSection:(NSInteger)section;

設(shè)置行高,頭視圖高度和尾視圖高度的估計值(對于高度可變的情況下啦粹,提高效率)

- (CGFloat)tableView:(UITableView*)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath*)indexPath;

- (CGFloat)tableView:(UITableView*)tableView estimatedHeightForHeaderInSection:(NSInteger)section;

- (CGFloat)tableView:(UITableView*)tableView estimatedHeightForFooterInSection:(NSInteger)section;

設(shè)置自定義頭視圖和尾視圖

- (UIView*)tableView:(UITableView*)tableView viewForHeaderInSection:(NSInteger)section;

- (UIView*)tableView:(UITableView*)tableView viewForFooterInSection:(NSInteger)section;

設(shè)置cell是否可以高亮

- (BOOL)tableView:(UITableView*)tableView shouldHighlightRowAtIndexPath:(NSIndexPath*)indexPath;

cell高亮和取消高亮?xí)r分別調(diào)用的函數(shù)

- (void)tableView:(UITableView*)tableView didHighlightRowAtIndexPath:(NSIndexPath*)indexPath;

- (void)tableView:(UITableView*)tableView didUnhighlightRowAtIndexPath:(NSIndexPath*)indexPath;

當(dāng)即將選中某行和取消選中某行時調(diào)用的函數(shù)偿荷,返回一直位置,執(zhí)行選中或者取消選中

- (NSIndexPath*)tableView:(UITableView*)tableView willSelectRowAtIndexPath:(NSIndexPath*)indexPath;

- (NSIndexPath*)tableView:(UITableView*)tableView willDeselectRowAtIndexPath:(NSIndexPath*)indexPath;

已經(jīng)選中和已經(jīng)取消選中后調(diào)用的函數(shù)

- (void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath;

- (void)tableView:(UITableView*)tableView didDeselectRowAtIndexPath:(NSIndexPath*)indexPath;

設(shè)置tableView被編輯時的狀態(tài)風(fēng)格唠椭,如果不設(shè)置跳纳,默認都是刪除風(fēng)格

- (UITableViewCellEditingStyle)tableView:(UITableView*)tableView editingStyleForRowAtIndexPath:(NSIndexPath*)indexPath;

自定義刪除按鈕的標(biāo)題

- (NSString*)tableView:(UITableView*)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath*)indexPath;

下面這個方法是IOS8中的新方法,用于自定義創(chuàng)建tableView被編輯時右邊的按鈕贪嫂,按鈕類型為UITableViewRowAction寺庄。

- (NSArray*)tableView:(UITableView*)tableView editActionsForRowAtIndexPath:(NSIndexPath*)indexPath?;

設(shè)置編輯時背景是否縮進

- (BOOL)tableView:(UITableView*)tableView shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath*)indexPath;

將要編輯和結(jié)束編輯時調(diào)用的方法

- (void)tableView:(UITableView*)tableView willBeginEditingRowAtIndexPath:(NSIndexPath*)indexPath;

- (void)tableView:(UITableView*)tableView didEndEditingRowAtIndexPath:(NSIndexPath*)indexPath;

移動特定的某行

- (NSIndexPath*)tableView:(UITableView*)tableView targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath*)sourceIndexPath toProposedIndexPath:(NSIndexPath*)proposedDestinationIndexPath;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市力崇,隨后出現(xiàn)的幾起案子斗塘,更是在濱河造成了極大的恐慌,老刑警劉巖亮靴,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件馍盟,死亡現(xiàn)場離奇詭異,居然都是意外死亡台猴,警方通過查閱死者的電腦和手機朽合,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門俱两,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人曹步,你說我怎么就攤上這事宪彩。” “怎么了讲婚?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵尿孔,是天一觀的道長。 經(jīng)常有香客問我筹麸,道長活合,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任物赶,我火速辦了婚禮白指,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘酵紫。我一直安慰自己告嘲,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布奖地。 她就那樣靜靜地躺著橄唬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪参歹。 梳的紋絲不亂的頭發(fā)上仰楚,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天,我揣著相機與錄音犬庇,去河邊找鬼僧界。 笑死,一個胖子當(dāng)著我的面吹牛械筛,可吹牛的內(nèi)容都是我干的捎泻。 我是一名探鬼主播飒炎,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼埋哟,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了郎汪?” 一聲冷哼從身側(cè)響起赤赊,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎煞赢,沒想到半個月后抛计,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡照筑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年吹截,在試婚紗的時候發(fā)現(xiàn)自己被綠了瘦陈。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡波俄,死狀恐怖晨逝,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情懦铺,我是刑警寧澤捉貌,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站冬念,受9級特大地震影響趁窃,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜急前,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一醒陆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧裆针,春花似錦统求、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至另假,卻和暖如春像屋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背边篮。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工己莺, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人戈轿。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓凌受,卻偏偏與公主長得像,于是被迫代替她去往敵國和親思杯。 傳聞我的和親對象是個殘疾皇子胜蛉,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內(nèi)容