编码篇-iOS开发中的奇巧小伎

摘要

最近搜集了自己以前的笔记中的一些小知识点,归为这篇文章,都是亲测有效的奇巧小伎,当你使用到时,你会大呼过瘾的。

  • 1.TableView不显示没内容的Cell
  • 2.百分号的转换
  • 3.禁止手机睡眠
  • 4.跳进app权限设置
  • 5.collectionView的内容小于其宽高的时候是不能滚动的,设置可以滚动:
  • 6.设置navigationBar上的title颜色和大小
  • 7.统一收起键盘
  • 8.导入自定义字体库
  • 9.动态方法的动态执行
  • 10.isKindOfClass和isMemberOfClass的区别
  • 11.Label字体大小
  • 12.为UIView某个角添加圆角
  • 13.将一个view放置在其兄弟视图的最上面、最下面
  • 14.让手机震动一下
  • 15.摇一摇功能
  • 16.修改UISegmentedControl的字体大小
  • 17.获取一个view所属的控制器
  • 18.UIImage和base64互转
  • 19.检查一个rect是否包含一个point
  • 20.UITextView中打开或禁用复制,剪切,选择,全选等功能
  • 21.用stringByReplacingOccurrencesOfString方法去掉空格,实际上只是做了字符替换操作,除了空格还可以替换其它字符,容易思维定势想不起来这个妙用。
  • 22、当使用-performSelector:withObject:withObject:afterDelay:方法时,需要传入多参数问题
  • 23、比较两个CGRect/CGSize/CGPoint是否相等
  • 24、比较两个NSDate相差多少小时
  • 25、播放一张张连续的图片
  • 26、判断两个rect是否有交叉
  • 27、判断一个字符串是否为数字
  • 28、将一个view保存为pdf格式
  • 29、获取当前导航控制器下前一个控制器
  • 30、保存UIImage到本地
  • 31、动画修改label上的文字
  • 32、判断一个view是否为另一个view的子视图,或者是子试图的子试图。
  • 33、获取手机RAM容量
  • 34、在UITextView中显示html文本
  • 35、选中textField或者textView所有文本(我这里以textView为例)
  • 36、隐藏UITextView/UITextField光标
  • 37、当UITextView/UITextField中没有文字时,禁用回车键
  • 38、通知监听APP生命周期
  • 39、获取collectionViewCell在屏幕中的frame
  • 40、UITextField文字周围增加边距
  • 41、比较两个UIImage是否相等**
  • 42、代码方式调整屏幕亮度
  • 43、float数据取整四舍五入
  • 44、让正在滑动的scrollView停止滚动(不是禁止,而是暂时停止滚动)
  • 45、使用xib设置UIView的边框、圆角
  • 46、将一个xib添加到另外一个xib上
  • 47、处理字符串,使其首字母大写
  • 48、获取字符串中的数字
  • 49、自动搜索功能,用户连续输入的时候不搜索,用户停止输入的时候自动搜索(我这里设置的是0.5s,可根据需求更改)
  • 50、某个界面多个事件同时响应引起的问题(比如,两个button同时按push到新界面,两个都会响应,可能导致push重叠)
  • 51、修改tabBar的frame
  • 52、修改键盘背景颜色
  • 53.本来我的statusbar是lightcontent的,结果用UIImagePickerController会导致我的statusbar的样式变成黑色
  • 54.把navigationbar弄成透明的而不是带模糊的效果,(亲测有效)

诸技罗列

1.TableView不显示没内容的Cell

self.tableView.tableFooterView = [[UIView alloc] init];

2.百分号的转换

NSString中需要格式化的字符串中百分号使用%%表示
例如:NSLog(@"%%%@%%",@"hello"),控制台会打印出%hello%。
自己键盘打出的 % 汉字形式下的还是会报警告,并且不会显示出来.把上文的粘贴过去使用吧!

3.禁止手机睡眠

[UIApplication sharedApplication].idleTimerDisabled = YES;

4.跳进app权限设置

// 跳进app设置
if (UIApplicationOpenSettingsURLString != NULL) {
    NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
    [[UIApplication sharedApplication] openURL:url];
}
测试注意:新项目测试,需要请求一下位置权限或者通知权限,才可以跳进自己的app设置里面(必须在info.plist 中设置私有属性的访问权限)
你的应用要提前至少申请了某一个权限,如(通知,定位等)。否则,会引起崩溃。

5.collectionView的内容小于其宽高的时候是不能滚动的,设置可以滚动:

collectionView.alwaysBounceHorizontal = YES;
collectionView.alwaysBounceVertical = YES;

6.设置navigationBar上的title颜色和大小

[self.navigationController.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor youColor], NSFontAttributeName : [UIFont systemFontOfSize:15]}]

7.统一收起键盘

[[[UIApplication sharedApplication] keyWindow] endEditing:YES];

8.导入自定义字体库

1、找到你想用的字体的 ttf 格式,拖入工程
2、在工程的plist中增加一行数组,“Fonts provided by application”
3、为这个key添加一个item,value为你刚才导入的ttf文件名
4、直接使用即可:label.font = [UIFont fontWithName:@"你刚才导入的ttf文件名" size:20.0];

9.动态方法的动态执行

使用以下代码调用即可:
if (! obj) { return; }
SEL selector = NSSelectorFromString(@"aMethod");
IMP imp = [obj methodForSelector:selector];
void (*func)(id, SEL) = (void *)imp;
func(obj, selector);

或者:
SEL selector = NSSelectorFromString(@"aMethod");
((void (*)(id, SEL))[obj methodForSelector:selector])(obj, selector);

10.isKindOfClass和isMemberOfClass的区别

isKindOfClass  可以判断某个对象是否属于某个类,或者这个类的子类。
isMemberOfClass  更加精准,它只能判断这个对象是否是某一个类的实例(不能判断子类)

11.Label字体大小

label.font.pointSize

12.为UIView某个角添加圆角

// 左上角和右下角添加圆角
UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:view.bounds byRoundingCorners:(UIRectCornerTopLeft | UIRectCornerBottomRight) cornerRadii:CGSizeMake(20, 20)];
CAShapeLayer *maskLayer = [CAShapeLayer layer];
maskLayer.frame = view.bounds;
maskLayer.path = maskPath.CGPath;
view.layer.mask = maskLayer;

13.将一个view放置在其兄弟视图的最上面、最下面

最上面
[parentView bringSubviewToFront:yourView]
最下面
[parentView sendSubviewToBack:yourView]

14.让手机震动一下

需要导入框架  
#import <AudioToolbox/AudioToolbox.h>
AudioServicesPlayAlertSound(kSystemSoundID_Vibrate);

15.摇一摇功能

1、打开摇一摇功能
[UIApplication sharedApplication].applicationSupportsShakeToEdit = YES;
2、让需要摇动的控制器成为第一响应者
[self becomeFirstResponder];
3、实现以下方法

// 开始摇动
- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event
// 取消摇动
- (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event
// 摇动结束
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event

16.修改UISegmentedControl的字体大小

[segment setTitleTextAttributes:@{NSFontAttributeName : [UIFont systemFontOfSize:15.0f]} forState:UIControlStateNormal];

17.获取一个view所属的控制器

// view分类方法
- (UIViewController *)belongViewController {
    for (UIView *next = [self superview]; next; next = next.superview) {
        UIResponder* nextResponder = [next nextResponder];
        if ([nextResponder isKindOfClass:[UIViewController class]]) {
          return (UIViewController *)nextResponder;
       }
    }
  return nil;
}

18.UIImage和base64互转

 // view分类方法
- (NSString *)encodeToBase64String:(UIImage *)image {
 return [UIImagePNGRepresentation(image) base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
}

- (UIImage *)decodeBase64ToImage:(NSString *)strEncodeData {
  NSData *data = [[NSData alloc]initWithBase64EncodedString:strEncodeData options:NSDataBase64DecodingIgnoreUnknownCharacters];
  return [UIImage imageWithData:data];
}

19.检查一个rect是否包含一个point

// point是否在rect内
BOOL isContains = CGRectContainsPoint(rect, point);

20.UITextView中打开或禁用复制,剪切,选择,全选等功能

// 继承UITextView重写这个方法
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
// 返回NO为禁用,YES为开启
    // 粘贴
    if (action == @selector(paste:)) return NO;
    // 剪切
    if (action == @selector(cut:)) return NO;
    // 复制
    if (action == @selector(copy:)) return NO;
    // 选择
    if (action == @selector(select:)) return NO;
    // 选中全部
    if (action == @selector(selectAll:)) return NO;
    // 删除
    if (action == @selector(delete:)) return NO;
    // 分享
    if (action == @selector(share)) return NO;
    return [super canPerformAction:action withSender:sender];
}

21.用stringByReplacingOccurrencesOfString方法去掉空格,实际上只是做了字符替换操作,除了空格还可以替换其它字符,容易思维定势想不起来这个妙用。

22、当使用-performSelector:withObject:withObject:afterDelay:方法时,需要传入多参数问题

// 方法一、
// 把参数放进一个数组/字典,直接把数组/字典当成一个参数传过去,具体方法实现的地方再解析这个数组/字典
NSArray * array =  [NSArray arrayWithObjects: @"first", @"second", nil];
[self performSelector:@selector(fooFirstInput:) withObject: array afterDelay:15.0];

// 方法二、
// 使用NSInvocation
SEL aSelector = NSSelectorFromString(@"doSoming:argument2:");
    NSInteger argument1 = 10;
    NSString *argument2 = @"argument2";
    if([self respondsToSelector:aSelector]) {
          NSInvocation *inv = [NSInvocation invocationWithMethodSignature:[self methodSignatureForSelector:aSelector]];
        [inv setSelector:aSelector];
        [inv setTarget:self];
        [inv setArgument:&(argument1) atIndex:2];
        [inv setArgument:&(argument2) atIndex:3];
        [inv performSelector:@selector(invoke) withObject:nil afterDelay:15.0];
    }

23、比较两个CGRect/CGSize/CGPoint是否相等

if (CGRectEqualToRect(rect1, rect2)) { // 两个区域相等
    // do some
}
if (CGPointEqualToPoint(point1, point2)) { // 两个点相等
    // do some
}
if (CGSizeEqualToSize(size1, size2)) { // 两个size相等
    // do some
}

24、比较两个NSDate相差多少小时

 NSDate* date1 = someDate;
 NSDate* date2 = someOtherDate;
 NSTimeInterval distanceBetweenDates = [date1 timeIntervalSinceDate:date2];
 double secondsInAnHour = 3600;
// 除以3600是把秒化成小时,除以60得到结果为相差的分钟数
 NSInteger hoursBetweenDates = distanceBetweenDates / secondsInAnHour;

25、播放一张张连续的图片

// 加入现在有三张图片分别为animate_1、animate_2、animate_3
// 方法一
  imageView.animationImages = @[[UIImage imageNamed:@"animate_1"], [UIImage imageNamed:@"animate_2"], [UIImage imageNamed:@"animate_3"]];
  imageView.animationDuration = 1.0;
// 方法二
  imageView.image = [UIImage animatedImageNamed:@"animate_" duration:1.0];
// 方法二解释下,这个方法会加载animate_为前缀的,后边0-1024,也就是animate_0、animate_1一直到a

26、判断两个rect是否有交叉

 if (CGRectIntersectsRect(rect1, rect2)) {
}

27、判断一个字符串是否为数字

NSCharacterSet *notDigits = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
if ([str rangeOfCharacterFromSet:notDigits].location == NSNotFound)
{   // 是数字
} else{
  // 不是数字
 }

28、将一个view保存为pdf格式

- (void)createPDFfromUIView:(UIView*)aView saveToDocumentsWithFileName:(NSString*)aFilename
  {
      NSMutableData *pdfData = [NSMutableData data];
      UIGraphicsBeginPDFContextToData(pdfData, aView.bounds, nil);
      UIGraphicsBeginPDFPage();
      CGContextRef pdfContext = UIGraphicsGetCurrentContext();
      [aView.layer renderInContext:pdfContext];
      UIGraphicsEndPDFContext();

    NSArray* documentDirectories = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES);
    NSString* documentDirectory = [documentDirectories objectAtIndex:0];
    NSString* documentDirectoryFilename = [documentDirectory stringByAppendingPathComponent:aFilename];
    [pdfData writeToFile:documentDirectoryFilename atomically:YES];
    NSLog(@"documentDirectoryFileName: %@",documentDirectoryFilename);
}

29、获取当前导航控制器下前一个控制器

- (UIViewController *)backViewController
{
    NSInteger myIndex = [self.navigationController.viewControllers indexOfObject:self];
    if ( myIndex != 0 && myIndex != NSNotFound ) {
        return [self.navigationController.viewControllers objectAtIndex:myIndex-1];
    } else {
        return nil;
    }
  }

30、保存UIImage到本地

  NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
  NSString *filePath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"Image.png"];

  [UIImagePNGRepresentation(image) writeToFile:filePath atomically:YES];

31、动画修改label上的文字

// 方法一
CATransition *animation = [CATransition animation];
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
animation.type = kCATransitionFade;
animation.duration = 0.75;
[self.label.layer addAnimation:animation forKey:@"kCATransitionFade"];
self.label.text = @"New";

// 方法二
[UIView transitionWithView:self.label
                  duration:0.25f
                   options:UIViewAnimationOptionTransitionCrossDissolve
                animations:^{
                    self.label.text = @"Well done!";
                } completion:nil];

// 方法三
[UIView animateWithDuration:1.0
                 animations:^{
                     self.label.alpha = 0.0f;
                     self.label.text = @"newText";
                     self.label.alpha = 1.0f;
                 }];

32、判断一个view是否为另一个view的子视图,或者是子试图的子试图。

// 如果myView是self.view本身,也会返回yes,
BOOL isSubView = [myView isDescendantOfView:self.view];

33、获取手机RAM容量

// 需要导入#import
mach_port_t host_port;
mach_msg_type_number_t host_size;
vm_size_t pagesize;

host_port = mach_host_self();
host_size = sizeof(vm_statistics_data_t) / sizeof(integer_t);
host_page_size(host_port, &pagesize);

vm_statistics_data_t vm_stat;

if (host_statistics(host_port, HOST_VM_INFO, (host_info_t)&vm_stat, &host_size) != KERN_SUCCESS) {
    NSLog(@"Failed to fetch vm statistics");
}

/* Stats in bytes */
natural_t mem_used = (vm_stat.active_count +
                      vm_stat.inactive_count +
                      vm_stat.wire_count) * pagesize;
natural_t mem_free = vm_stat.free_count * pagesize;
natural_t mem_total = mem_used + mem_free;
NSLog(@"已用: %u 可用: %u 总共: %u", mem_used, mem_free, mem_total);

34、在UITextView中显示html文本

UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(20, 30, 100, 199)];
textView.backgroundColor = [UIColor redColor];
[self.view addSubview:textView];
NSString *htmlString = @"";
NSAttributedString *attributedString = [[NSAttributedString alloc] initWithData: [htmlString dataUsingEncoding:NSUnicodeStringEncoding] options: @{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } documentAttributes: nil error: nil];
textView.attributedText = attributedString;

35、选中textField或者textView所有文本(我这里以textView为例)

[self.textView setSelectedTextRange:[self.textView textRangeFromPosition:self.textView.beginningOfDocument toPosition:self.textView.endOfDocument]]

36、隐藏UITextView/UITextField光标

textField.tintColor = [UIColor clearColor];

37、当UITextView/UITextField中没有文字时,禁用回车键

textField.enablesReturnKeyAutomatically = YES;

38、通知监听APP生命周期

通知监听APP生命周期

UIApplicationDidEnterBackgroundNotification 应用程序进入后台
UIApplicationWillEnterForegroundNotification 应用程序将要进入前台
UIApplicationDidFinishLaunchingNotification 应用程序完成启动
UIApplicationDidFinishLaunchingNotification 应用程序由挂起变的活跃
UIApplicationWillResignActiveNotification 应用程序挂起(有电话进来或者锁屏)
UIApplicationDidReceiveMemoryWarningNotification 应用程序收到内存警告
UIApplicationDidReceiveMemoryWarningNotification 应用程序终止(后台杀死、手机关机等)
UIApplicationSignificantTimeChangeNotification 当有重大时间改变(凌晨0点,设备时间被修改,时区改变等)
UIApplicationWillChangeStatusBarOrientationNotification 设备方向将要改变
UIApplicationDidChangeStatusBarOrientationNotification 设备方向改变
UIApplicationWillChangeStatusBarFrameNotification 设备状态栏frame将要改变
UIApplicationDidChangeStatusBarFrameNotification 设备状态栏frame改变
UIApplicationBackgroundRefreshStatusDidChangeNotification 应用程序在后台下载内容的状态发生变化
UIApplicationProtectedDataWillBecomeUnavailable 本地受保护的文件被锁定,无法访问
UIApplicationProtectedDataWillBecomeUnavailable 本地受保护的文件可用了

39、获取collectionViewCell在屏幕中的frame
可以用来设计collectionViewCell点击放大缩小到初始位置。

UICollectionViewLayoutAttributes *attributes = [collectionView layoutAttributesForItemAtIndexPath:indexPath];
CGRect cellRect = attributes.frame;
CGRect cellFrameInSuperview = [collectionView convertRect:cellRect toView:[cv superview]];

40、UITextField文字周围增加边距

// 子类化UITextField,增加insert属性
@interface WZBTextField : UITextField
@property (nonatomic, assign) UIEdgeInsets insets;
@end

// 在.m文件重写下列方法
- (CGRect)textRectForBounds:(CGRect)bounds {
CGRect paddedRect = UIEdgeInsetsInsetRect(bounds, self.insets);
if (self.rightViewMode == UITextFieldViewModeAlways || self.rightViewMode == UITextFieldViewModeUnlessEditing) {
    return [self adjustRectWithWidthRightView:paddedRect];
}
return paddedRect;
}

- (CGRect)placeholderRectForBounds:(CGRect)bounds {
CGRect paddedRect = UIEdgeInsetsInsetRect(bounds, self.insets);

if (self.rightViewMode == UITextFieldViewModeAlways || self.rightViewMode == UITextFieldViewModeUnlessEditing) {
    return [self adjustRectWithWidthRightView:paddedRect];
}
return paddedRect;
}

 - (CGRect)editingRectForBounds:(CGRect)bounds {
CGRect paddedRect = UIEdgeInsetsInsetRect(bounds, self.insets);
if (self.rightViewMode == UITextFieldViewModeAlways || self.rightViewMode == UITextFieldViewModeWhileEditing) {
    return [self adjustRectWithWidthRightView:paddedRect];
}
return paddedRect;
}

- (CGRect)adjustRectWithWidthRightView:(CGRect)bounds {
    CGRect paddedRect = bounds;
    paddedRect.size.width -= CGRectGetWidth(self.rightView.frame);

    return paddedRect;
}

41、比较两个UIImage是否相等**

- (BOOL)image:(UIImage *)image1 isEqualTo:(UIImage *)image2
{
      NSData *data1 = UIImagePNGRepresentation(image1);
      NSData *data2 = UIImagePNGRepresentation(image2);

      return [data1 isEqual:data2];
}

42、代码方式调整屏幕亮度

// brightness属性值在0-1之间,0代表最小亮度,1代表最大亮度
[[UIScreen mainScreen] setBrightness:0.5];

43、float数据取整四舍五入

CGFloat f = 4.65;
NSLog(@"%d", (int)f);    // 打印结果4

CGFloat f = 4.65;
NSLog(@"%d", (int)round(f));    // 打印结果5

44、让正在滑动的scrollView停止滚动(不是禁止,而是暂时停止滚动)

[scrollView setContentOffset:scrollView.contentOffset animated:NO];

45、使用xib设置UIView的边框、圆角

image

46、将一个xib添加到另外一个xib上

// 假设你的自定义view名字为CustomView,你需要在CustomView.m中重写 `- (instancetype)initWithCoder:(NSCoder *)aDecoder` 方法,代码如下:
- (instancetype)initWithCoder:(NSCoder *)aDecoder {
if ((self = [super initWithCoder:aDecoder])) {
    [self addSubview:[[[NSBundle mainBundle] loadNibNamed:@"CustomView" owner:self options:nil] objectAtIndex:0]];
}
return self;
}
将一个xib添加到另外一个xib上

47、处理字符串,使其首字母大写

NSString *str = @"abcdefghijklmn";
NSString *resultStr;
if (str && str.length > 0) {
    resultStr = [str stringByReplacingCharactersInRange:NSMakeRange(0,1) withString:[[str substringToIndex:1] capitalizedString]];
}
NSLog(@"%@", resultStr);

48、获取字符串中的数字

- (NSString *)getNumberFromStr:(NSString *)str
{
    NSCharacterSet *nonDigitCharacterSet = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
    return [[str componentsSeparatedByCharactersInSet:nonDigitCharacterSet] componentsJoinedByString:@""];
}

  NSLog(@"%@", [self getNumberFromStr:@"a0b0c1d2e3f4fda8fa8fad9fsad23"]); // 00123488923

49、自动搜索功能,用户连续输入的时候不搜索,用户停止输入的时候自动搜索(我这里设置的是0.5s,可根据需求更改)

// 输入框文字改变的时候调用
-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{
    // 先取消调用搜索方法
    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(searchNewResult) object:nil];
    // 0.5秒后调用搜索方法
    [self performSelector:@selector(searchNewResult) withObject:nil afterDelay:0.5];
}

50、某个界面多个事件同时响应引起的问题(比如,两个button同时按push到新界面,两个都会响应,可能导致push重叠)

// UIView有个属性叫做exclusiveTouch,设置为YES后,其响应事件会和其他view互斥(有其他view事件响应的时候点击它不起作用)
view.exclusiveTouch = YES;

// 一个一个设置太麻烦了,可以全局设置
[[UIView appearance] setExclusiveTouch:YES];

// 或者只设置button
[[UIButton appearance] setExclusiveTouch:YES];

51、修改tabBar的frame

// 子类化UITabBarViewController,我这里以修改tabBar高度为例,重写viewWillLayoutSubviews方法
#import "WZBTabBarViewController.h"

@interface WZBTabBarViewController ()

@end

@implementation WZBTabBarViewController
- (void)viewWillLayoutSubviews {

    CGRect tabFrame = self.tabBar.frame;
    tabFrame.size.height = 100;
    tabFrame.origin.y = self.view.frame.size.height - 100;
    self.tabBar.frame = tabFrame;
}
@end

52、修改键盘背景颜色

// 设置某个键盘颜色
textField.keyboardAppearance = UIKeyboardAppearanceAlert;

// 设置工程中所有键盘颜色
[[UITextField appearance] setKeyboardAppearance:UIKeyboardAppearanceAlert];

53.本来我的statusbar是lightcontent的,结果用UIImagePickerController会导致我的statusbar的样式变成黑色

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
}

54.把navigationbar弄成透明的而不是带模糊的效果,(亲测有效)

 [self.navigationController.navigationBar setBackgroundImage:[UIImage new]
                         forBarMetrics:UIBarMetricsDefault];
self.navigationController.navigationBar.shadowImage = [UIImage new];
self.navigationController.navigationBar.translucent = YES;

小结

后续会持续更新....

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

推荐阅读更多精彩内容