UITableView

版權聲明:未經本人允許,禁止轉載.

1. TableView初始化

UITableView *tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];
tableView.delegate = self;
tableView.dataSource = self;
[self.view addSubview:tableView];
  • 1.UITableView有兩種風格:UITableViewStylePlain(普通樣式)和UITableViewStyleGrouped(分組樣式)
  • 2.UITableView顯示數據需要設置數據源dataSource,執行操作需要設置代理delegate

2. TableView的屬性和方法

1. 設置高度

  1. 設置cell,分區頭(header),分區尾(footer)的高度
    //屬性設置 設置表中所有的對象
    tableView.rowHeight = 50;
    tableView.sectionHeaderHeight = 40;
    tableView.sectionFooterHeight = 40;
    //delegate
    //返回指定indexPath的Row的高度時調用
    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    return 50;
    }
    //返回指定分區(section)的Header的高度時調用
    - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
    return 40;
    }
    //返回指定分區(section)的Footer的高度時調用
    - (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
    return 40;
    }
  2. 估算cell,分區頭(header),分區尾(footer)的高度 (iOS 7 or later)
    //屬性設置 設置表中所有的對象
    tableView.estimatedRowHeight = 50;
    tableView.estimatedSectionHeaderHeight = 40;
    tableView.estimatedSectionFooterHeight = 40;
    //delegate
    //估算指定indexPath的Row的高度調用
    - (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {
    return 50;
    }
    //估算指定分區(section)的Header的高度時調用
    - (CGFloat)tableView:(UITableView *)tableView estimatedHeightForHeaderInSection:(NSInteger)section {
    return 40;
    }
    //估算指定分區(section)的Footer的高度時調用
    - (CGFloat)tableView:(UITableView *)tableView estimatedHeightForFooterInSection:(NSInteger)section {
    return 40;
    }

估算高度(estimatedHeight)是為了加快tableView的加載速度,設置估算高度后,conteSize.height根據 cell的估算值 * cell的個數 計算,contentSize會隨著滾動從估算慢慢替換成真實高度,結果會導致滾動條的大小處于不穩定狀態,甚至出現"跳躍".

  1. 常量UITableViewAutomaticDimension (iOS 5 or later)
    //cell(iOS 8 or later)
    tableView.estimatedRowHeight = 44.0
    tableView.rowHeight = UITableViewAutomaticDimension

在UITableViewStyleGrouped情況下,動態計算TableView的headerTitle和FooterTitle的高度
在iOS 8之后,可以動態計算cell的高度,要求必須使用autoLayout

2.設置cell的分割線(separator)

  1. 設置分割線縮進
    屬性: separatorInset (iOS 7 or later) 在代碼情況下正常
    tableView.separatorInset = UIEdgeInsetsMake(0, 30, 0, 50);
  2. 設置分割線類型
    屬性: separatorStyle 為枚舉類型
    tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    enum {
    UITableViewCellSeparatorStyleNone,//沒分割線
    UITableViewCellSeparatorStyleSingleLine,//單線(默認)
    UITableViewCellSeparatorStyleSingleLineEtched//只支持UITableViewStyleGrouped,不過看起來沒什么效果
    }
  3. 設置分割線顏色
    屬性: separatorColor
    //默認為灰色
    tableView.separatorColor = [UIColor cyanColor];
  4. 設置分割線模糊化(毛玻璃效果)
    屬性: separatorEffect (iOS 8 or later)
    分割線會根據背景色模糊化
    UIImageView *bg = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"launchImage.png"]];
    tableView.backgroundView = bg;
    UIBlurEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
    UIVibrancyEffect *vibrancyEffect = [UIVibrancyEffect effectForBlurEffect:blurEffect];
    tableView.separatorEffect = vibrancyEffect;

3.設置分區索引欄 (SectionIndex)

  1. 設置索引欄顯示所需最小cell的數量
    屬性: sectionIndexMinimumDisplayRowCount
    //cell個數 >= 20 顯示索引欄
    tableView.sectionIndexMinimumDisplayRowCount = 20;
  2. 設置索引欄字體顏色
    屬性: sectionIndexColor (iOS 6 or later)
    tableView.sectionIndexColor = [UIColor redColor];
  3. 設置索引欄背景色
    屬性: sectionIndexBackgroundColor (iOS 7 or later)
    tableView.sectionIndexBackgroundColor = [UIColor cyanColor];
  4. 設置索引欄點擊時的背景色
    屬性: sectionIndexTrackingBackgroundColor (iOS 6 or later)
    tableView.sectionIndexTrackingBackgroundColor = [UIColor blackColor];
  5. 設置索引欄內容
    數據源: - sectionIndexTitlesForTableView:
    返回索引數組,對應相應的分區
    - (nullable NSArray<NSString *> *)sectionIndexTitlesForTableView:(UITableView *)tableView {
    return @[@"0",@"1",@"2",@"3",@"10",@"20"];
    }
  6. 設置各個索引對應的分區
    數據源: - tableView:sectionForSectionIndexTitle:atIndex:
    通過title和index確定索引,返回該索引指定的分區
    - (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index {
    if ([title isEqualToString:@"10"]){
    return 0;
    }else if(index == 5) {
    return 1;
    }
    return index;
    }
  7. 刷新分區索引欄 (iOS 3.0 or later)
    調用方法: - reloadSectionIndexTitles
    [tableView reloadSectionIndexTitles];

4.設置背景View,表頭,表尾

  1. 設置TableView背景的View
    一般用于設置背景圖片等,會自適應大小
    屬性: backgroundView (iOS 3.2 or later)
    UIImageView *bg = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Image.png"]];
    tableView.backgroundView = bg;
  2. 設置表格的表頭
    表格最上部添加輔助的View,不會懸停
    屬性: tableHeaderView
    tableView.tableHeaderView = [self tableHeaderView];
    - (UIView *)tableHeaderView {
    UILabel *headerView = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 0, 80)];
    headerView.backgroundColor = [UIColor orangeColor];
    headerView.text = @"表頭";
    headerView.textAlignment = NSTextAlignmentCenter;
    return headerView;
    }
  3. 設置表格的表尾
    表格最下部添加輔助View,不會懸停
    屬性: tableFooterView
    tableView.tableFooterView = [self tableFooterView];
    - (UIView *)tableFooterView {
    UILabel *footerView = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 0, 80)];
    footerView.backgroundColor = [UIColor orangeColor];
    footerView.text = @"表尾";
    footerView.textAlignment = NSTextAlignmentCenter;
    return footerView;
    }

5.設置分區頭(header)和分區尾(footer)

  1. 注冊HeaderFooterView (iOS 6.0 or later)
    注冊Xib
    調用方法: - registerNib:forHeaderFooterViewReuseIdentifier:
    [tableView registerNib:[UINib nibWithNibName:@"TableHeaderFooterView" bundle:nil] forHeaderFooterViewReuseIdentifier:footerView];
    注冊Class
    調用方法: - registerClass:forHeaderFooterViewReuseIdentifier:
    [tableView registerClass:[TableHeaderFooterView class] forHeaderFooterViewReuseIdentifier:headerView];
  2. 獲取重用的HeaderFooterView (iOS 6.0 or later)
    調用方法: - dequeueReusableHeaderFooterViewWithIdentifier:
    TableHeaderFooterView *view = [tableView dequeueReusableHeaderFooterViewWithIdentifier:headerView];
  3. 創建HeaderFooterView
    獲取指定分區(section)的HeaderView時調用
    代理: - tableView:viewForHeaderInSection:
    - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
    TableHeaderFooterView *view = [tableView dequeueReusableHeaderFooterViewWithIdentifier:headerView];
    view.textLabel.text = [NSString stringWithFormat:@"第%ld分區頭",section];
    return view;
    }
    獲取指定分區(section)的FooterView時調用
    代理: - tableView:viewForFooterInSection:
    - (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
    TableHeaderFooterView *view = [tableView dequeueReusableHeaderFooterViewWithIdentifier:footerView];
    view.name.text = [NSString stringWithFormat:@"第%ld分區尾",section];
    return view;
    }
  4. 設置HeaderFooterTitle (HeaderFooterView優先級大于title)
    設置指定分區(section)的title (HeaderTitle)
    數據源: - tableView:titleForHeaderInSection:
    - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
    return [NSString stringWithFormat:@"第%ld分區頭",section];
    }
    設置指定分區(section)的title (FooterTitle)
    數據源: - tableView:titleForFooterInSection:
    - (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section {
    return [NSString stringWithFormat:@"第%ld分區尾",section];
    }
  5. 設置修改指定分區(section)的HeaderFooterView (iOS 6.0 or later)
    HeaderView將要顯示時調用
    代理: - tableView:willDisplayHeaderView:forSection:
    FooterView將要顯示時調用
    代理: - tableView:willDisplayFooterView:forSection:
    //headerView將要出現
    - (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section {
    TableHeaderFooterView *header = (TableHeaderFooterView *)view;
    header.contentView.backgroundColor = [UIColor yellowColor];
    }
    //footerView將要出現
    - (void)tableView:(UITableView *)tableView willDisplayFooterView:(nonnull UIView *)view forSection:(NSInteger)section {
    if (section == 0) {
    TableHeaderFooterView *footer = (TableHeaderFooterView *)view;
    footer.bgView.backgroundColor = [UIColor greenColor];
    }
    }
    HeaderView已經消失時調用
    代理: - tableView:didEndDisplayingHeaderView:forSection:
    FooterView已經消失時調用
    代理: - tableView:didEndDisplayingFooterView:forSection:
    //headerView已經消失
    - (void)tableView:(UITableView *)tableView didEndDisplayingHeaderView:(nonnull UIView *)view forSection:(NSInteger)section {
    TableHeaderFooterView *header = (TableHeaderFooterView *)view;
    header.textLabel.textAlignment = NSTextAlignmentRight;
    }
    //footerView已經消失
    - (void)tableView:(UITableView *)tableView didEndDisplayingFooterView:(nonnull UIView *)view forSection:(NSInteger)section {
    if (section == 1) {
    TableHeaderFooterView *footer = (TableHeaderFooterView *)view;
    footer.bgView.backgroundColor = [UIColor orangeColor];
    }
    }
  6. 返回HeaderFooterView (iOS 6.0 or later)
    返回指定分區(section)的HeaderView
    調用方法: - headerViewForSection:
    TableHeaderFooterView *headerView = (TableHeaderFooterView *)[tableView headerViewForSection:indexPath.section];
    headerView.contentView.backgroundColor = [UIColor blackColor];
    返回指定分區(section)的FooterView
    調用方法: - footerViewForSection:
    TableHeaderFooterView *footerView = (TableHeaderFooterView *)[tableView footerViewForSection:indexPath.section];
    footerView.bgView.backgroundColor = [UIColor grayColor];
  7. 返回HeaderFooterView的大小Rect
    返回指定分區(section)的大小(HeaderRect)
    調用方法: - rectForHeaderInSection:
    CGRect headerRect = [tableView rectForHeaderInSection:indexPath.section];
    NSLog(@"分區頭大小 = %@",NSStringFromCGRect(headerRect));
    返回指定分區(section)的大小(FooterRect)
    調用方法: - rectForFooterInSection:
    CGRect footerRect = [tableView rectForFooterInSection:indexPath.section];
    NSLog(@"分區尾大小 = %@",NSStringFromCGRect(footerRect));

6.設置分區(section)

  1. 設置表格分區數
    數據源: - numberOfSectionsInTableView:
    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 4;
    }
  2. 返回表格分區數
    屬性:numberOfSections
    NSInteger number = tableView.numberOfSections;
  3. 返回指定分區(section)的大小
    調用方法: - rectForSection:
    CGRect sectionRect = [tableView rectForSection:indexPath.section];
    NSLog(@"分區大小 = %@",NSStringFromCGRect(sectionRect));
  4. 設置動畫塊
    調用方法: - beginUpdates 和 - endUpdates
    兩個方法成對使用,表示一個動畫塊.在動畫塊中可以對表格執行多個連續的插入,刪除,移動等操作
    [self.tableView beginUpdates];
    [self.tableView insertSections:set withRowAnimation:UITableViewRowAnimationLeft];
    [self.tableView deleteSections:set withRowAnimation:UITableViewRowAnimationTop];
    [self.tableView endUpdates];
  5. 通過指定的動畫,在指定位置插入分區(1個或多個)
    調用方法 - insertSections:withRowAnimation: 插入分區時,需要修改分區數目
    - (void)insertSection {
    NSIndexSet *set = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 3)];
    self.sectionNum += 3;
    [self.tableView insertSections:set withRowAnimation:UITableViewRowAnimationLeft];
    }
  6. 通過指定的動畫,刪除指定的分區(1個或多個)
    調用方法 - deleteSections:withRowAnimation: 刪除分區時,需要修改分區數目
    - (void)deleteSection {
    NSIndexSet *set = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 2)];
    if (self.sectionNum >= 2) {
    self.sectionNum -= 2;
    [self.tableView deleteSections:set withRowAnimation:UITableViewRowAnimationTop];
    }
    }
  7. 通過指定的動畫,刷新指定的分區(1個或多個)
    調用方法 - reloadSections:withRowAnimation:
    - (void)reloadSection {
    NSIndexSet *set = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 2)];
    [self.tableView reloadSections:set withRowAnimation:UITableViewRowAnimationTop];
    }
  8. 將指定分區移動到另一個位置 (iOS 5.0 or later)
    調用方法 - moveSection:toSection:
    - (void)moveSection {
    [self.tableView moveSection:1 toSection:2];
    }

7.設置TableViewCell

  1. 注冊cell
    注冊Xib (iOS 5.0 or later)
    調用方法 - registerNib:forCellReuseIdentifier:
    [tableView registerNib:[UINib nibWithNibName:@"TableViewCell" bundle:nil] forCellReuseIdentifier:tableViewCell2];
    注冊Class (iOS 6.0 or later)
    調用方法 - registerClass:forCellReuseIdentifier:
    [tableView registerClass:[TableViewCell class] forCellReuseIdentifier:tableViewCell1];
  2. 返回重用的cell
    方法1: - dequeueReusableCellWithIdentifier: 適用于cell為空時申請空間
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:tableViewCell1];
    if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:tableViewCell1];
    }
    方法2: - dequeueReusableCellWithIdentifier:forIndexPath: (iOS 6.0 or later) 適用于注冊的cell或storyboard中的cell
    TableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier forIndexPath:indexPath];
  3. 設置指定indexPath的cell
    必須實現的方法
    數據源: - tableView:cellForRowAtIndexPath:
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSString *identifier = (indexPath.section < 2) ? tableViewCell1:tableViewCell2;
    TableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier forIndexPath:indexPath];
    //前兩個分區為Cell1
    if (indexPath.section < 2) {
    cell.textLabel.text = [NSString stringWithFormat:@"test %ld %ld",indexPath.section,indexPath.row];
    }else {//其余的為Cell2
    cell.name.text = [NSString stringWithFormat:@"%ld",indexPath.section];
    cell.title.text = [NSString stringWithFormat:@"%ld",indexPath.row];
    }
    cell.backgroundColor = [UIColor clearColor];
    return cell;
    }
  4. 修改指定indexPath的cell
    cell將要顯示時調用(willDisplay)
    代理: - tableView:willDisplayCell:forRowAtIndexPath:
    - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.row == 0) {
    cell.contentView.backgroundColor = [UIColor purpleColor];
    }
    }
    cell已經消失時調用 (iOS 6.0 or later)
    代理: - tableView:didEndDisplayingCell:forRowAtIndexPath:
    - (void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.row == 2) {
    cell.contentView.backgroundColor = [UIColor blueColor];
    }
    }
  5. 返回指定indexPath對應的cell
    調用方法: - cellForRowAtIndexPath:
    TableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    cell.contentView.backgroundColor = [UIColor greenColor];
  6. 返回指定indexPath的row的Rect
    調用方法: - rectForRowAtIndexPath:
    CGRect cellRect = [tableView rectForRowAtIndexPath:indexPath];
    NSLog(@"cell大小 = %@",NSStringFromCGRect(cellRect));
  7. 返回可見區域內cell數組
    屬性:visibleCells
    NSArray *cellArr = tableView.visibleCells;
    NSLog(@"可見cell數組:%@",cellar);
  8. 設置指定分區(section)中row的個數
    必須實現的方法
    數據源: - tableView:numberOfRowsInSection:
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return self.rowNum;
    }
  9. 返回指定分區(section)中row的個數
    調用方法: - numberOfRowsInSection:
    NSInteger rowNum = [tableView numberOfRowsInSection:indexPath.section];
    NSLog(@"該分區row的個數 = %ld",rowNum);

8.NSIndexPath (UITableView)

  1. indexPath包括分區(section)和行(row)
    初始化: + indexPathForRow:inSection:
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:2 inSection:0];
    NSLog(@"section = %ld, row = %ld",indexPath.section,indexPath.row);
  2. 返回指定點所在row對應的indexPath
    調用方法: - indexPathForRowAtPoint:
    NSIndexPath *indexPath2 = [tableView indexPathForRowAtPoint:cellRect.origin];
    NSLog(@"section = %ld, row = %ld",indexPath2.section,indexPath2.row);
  3. 返回指定cell對應的indexPath
    調用方法: - indexPathForCell:
    NSIndexPath *indexPath3 = [tableView indexPathForCell:cell];
    NSLog(@"section = %ld, row = %ld",indexPath3.section,indexPath3.row);
  4. 返回選中row對應的indexPath
    屬性: - indexPathForSelectedRow
    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
    NSLog(@"section = %ld, row = %ld",indexPath.section,indexPath.row);
  5. 返回指定區域(Rect)內所有rows對應的indexPath數組
    調用方法: - indexPathsForRowsInRect:
    NSArray *indexPathArr1 = [self.tableView indexPathsForRowsInRect:self.view.bounds];
    NSLog(@"%@",indexPathArr1);
  6. 返回表格中所有可見行(rows)對應的indexPath數組
    屬性: indexPathsForVisibleRows
    NSArray *indexPathArr2 = [self.tableView indexPathsForVisibleRows];
    NSLog(@"%@",indexPathArr2);
  7. 返回表格中所有選中行(rows)對應的indexPath數組
    屬性: indexPathsForSelectedRows (iOS 5.0 or later)
    NSArray *indexPathArr3 = self.tableView.indexPathsForSelectedRows;
    NSLog(@"%@",indexPathArr3);

9.選擇(Selecte)和滾動(Scroll)

  1. 設置是否允許選擇(非編輯狀態下) 默認Yes
    屬性: allowsSelection (iOS 3.0 or later)
    tableView.allowsSelection = YES;
  2. 設置表格編輯狀態下是否允許選擇 默認為NO
    屬性: allowsSelectionDuringEditing
    tableView.allowsSelectionDuringEditing = YES;
  3. 設置表格是否允許多選(非編輯狀態下) 默認為NO
    屬性: allowsMultipleSelection (iOS 5.0 or later)
    tableView.allowsMultipleSelection = YES;
  4. 設置表格編輯狀態下是否允許多選 默認為NO
    屬性: allowsMultipleSelectionDuringEditing (iOS 5.0 or later)
    tableView.allowsMultipleSelectionDuringEditing = YES;
  5. 設置表格選中指定indexPath的row
    調用方法: - selectRowAtIndexPath:animated:scrollPosition:
    最后一個參數決定選定cell的顯示位置
    [tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionTop];
  6. 設置表格中指定indexPath的row的選中取消
    調用方法: - deselectRowAtIndexPath:animated:
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
  7. 用戶將要選中某行時觸發
    可以指定一些indexPath不能選擇,或選擇不同的row都是選擇同一個indexPath:
    代理: - tableView:willSelectRowAtIndexPath:
    //指定row == 0不能選擇
    - (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.row == 0) {
    return nil;
    }
    return indexPath;
    }
  8. 用戶完成選中某行時觸發
    可以做選中之后的操作
    代理: - tableView:didSelectRowAtIndexPath:
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    //取消選擇狀態
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    }
  9. 用戶將要取消選中行時觸發
    代理: - tableView:willDeselectRowAtIndexPath: (iOS 3.0 or later)
    //指定row == 1 不能取消選中
    - (NSIndexPath *)tableView:(UITableView *)tableView willDeselectRowAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.row == 1) {
    return nil;
    }
    return indexPath;
    }
  10. 用戶完成取消選中行時觸發
    做一些取消選中后的操作
    代理: - tableView:didDeselectRowAtIndexPath: (iOS 3.0 or later)
    - (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(nonnull NSIndexPath *)indexPath {
    TableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    cell.contentView.backgroundColor = [UIColor orangeColor];
    }
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,401評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,011評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,263評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,543評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,323評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,874評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,968評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,095評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,605評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,551評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,720評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,242評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,961評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,358評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,612評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,330評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,690評論 2 370

推薦閱讀更多精彩內容