`
shake863
  • 浏览: 661452 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【wordpress ios】源码学习 之 定制系统UI

 
阅读更多

 不说话,上码:

 

 

#import "UINavigationBar+Styled.h"

#import <objc/runtime.h>

@implementation UINavigationBar (Styled) 

- (void)layoutSubviewsWithShadows {
    // Since we exchanged implementations, this actually calls UIKit's layoutSubviews
    [self layoutSubviewsWithShadows];

    // Super sneaky/hacky way of getting dropshadows on all our styled navbars.
    //if ([[self class] respondsToSelector:@selector(appearance)]) {
        NSInteger shadowTag = 1;
        UIView *shadowView = [self viewWithTag:shadowTag];

        if (shadowView == nil) {
            UIImageView *shadowImg = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"navbar_shadow"]];
            shadowImg.frame = CGRectMake(0.0f, self.frame.size.height, self.frame.size.width, 15.0f);
            shadowImg.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleWidth;
            shadowImg.tag = shadowTag;
            [self addSubview:shadowImg];
            [shadowImg release];
        }
    //}
}

+ (void)load {
    Method origMethod = class_getInstanceMethod(self, @selector(layoutSubviews));
    Method newMethod = class_getInstanceMethod(self, @selector(layoutSubviewsWithShadows));
    method_exchangeImplementations(origMethod, newMethod);
}

@end
 

 

 

   上面代码是wordpress源码中的一个 category,目的是给ios5.0 之上的版本加阴影图片。但是ios5.0 的

appearance 不提供这个接口,所以就有了上面的代码的出现。

 

关键点:

一、+ (void)load 方法

     官方文档说明

 

      Invoked whenever a class or category is added to the Objective-C runtime; implement this method to perform class-specific behavior upon loading。

     意思就是运行时加载这个class或者category的时候会调用这个消息,来设定一个时机做一些class层面上自定义的事情。上述代码就是利用这个时机交换了系统的一个api消息,来实现定制。

     这个方法只会调用一次。

 

二、自定义系统方法

 

      例如上述代码,layoutSubviewsWithShadows 交换了系统的 layoutSubviews,但是需要注意的是,在你想发送系统消息的时候,还是要写成 [self layoutSubviewsWithShadows];

   代码中有特意的注释,这部分代码,会在每次需要layoutSubViews的时候调用。

 

wordpress是个宝藏, 里面有很多值得学习的地方,待我慢慢挖掘。

 

分享到:
评论

相关推荐

    IOS应用源码——wordpress ios客户端最新源码.zip

    标题中的“IOS应用源码——wordpress ios客户端最新源码.zip”表明这是一份关于iOS平台上的WordPress客户端应用程序的源代码。这份源代码可能是开发者为了学习、研究或改进WordPress iOS应用而发布的。源代码通常...

    IOS应用源码——wordpress ios客户端最新源码.rar

    通过深入研究这个源码,开发者可以学习到如何实现iOS应用的架构设计、数据持久化、网络编程、UI设计以及如何与其他服务(如WordPress)进行集成。这对于想要从事iOS应用开发,特别是与WordPress相关的项目的人来说,...

    IOS应用源码之【应用】WordPress源代碼.rar

    在iOS平台上开发应用程序时,WordPress...通过深入研究这个“iOS应用源码之【应用】WordPress源代碼.rar”文件,开发者可以学习到iOS开发的多个重要方面,并且能够将这些知识应用于其他类似项目,提升自己的开发技能。

    IOS应用源码之【应用】-WordPress源代碼.rar

    【标题】:“iOS应用源码之【应用】-WordPress源代码” 这个标题表明我们讨论的是一个关于iOS平台上的WordPress应用程序的源代码。WordPress是全球最流行的开源内容管理系统,主要用于搭建网站和博客。此源代码可能...

    IOS应用源码Demo-WordPress源代碼-毕设学习.zip

    【标题】"IOS应用源码Demo-WordPress源代碼-毕设学习.zip"涉及的核心知识点主要围绕iOS应用程序开发,特别是与WordPress集成的应用程序。在iOS平台上构建这样的应用,开发者需要熟悉Objective-C或Swift编程语言,...

    带有Flutter的WordPress应用程序:具有Flutter的功能完整的IOSAndroid应用程序,用于WordPress网站

    2. **WordPress**:这是一个基于WordPress内容管理系统构建的应用,意味着它可能包括文章阅读、评论、用户登录、主题定制等功能。 3. **iOS**:同样,该应用也支持iOS平台,允许iPhone和iPad用户访问和互动与...

    Flutter-for-Wordpress-App:使用Flutter和WP REST API构建的跨平台Wordpress新闻应用程序

    在GitHub上,你可能会找到名为"Flutter-for-Wordpress-App-master"的项目源码,这是一个很好的学习实例。通过查看和研究这些代码,你可以更深入地理解如何结合Flutter和WordPress REST API构建应用。此外,官方文档...

    wp-appkit-addons:WP AppKit WordPress 插件的插件

    在开发或定制这些插件时,熟悉WordPress的插件结构和钩子系统也是必要的,因为它们决定了插件如何与WordPress核心交互。此外,理解移动应用的构建过程,包括使用Xcode(iOS)和Android Studio(Android)进行编译和...

    50款经典iPhone开源应用

    WordPress By Automattic则是WordPress博客平台的iOS客户端,对于博客和内容管理系统的开发者有着很高的参考价值。Your Rights是一本法律应急手册,它演示了如何制作教育类应用并提供实用信息。 最后,31 iPhone ...

    基于Uniapp开发壁纸小程序源码 微信抖音双端小程序源码.rar

    - **WordPress壁纸小程序**:这可能是一个额外的源码或插件,用于将WordPress网站与壁纸小程序整合,或者是在WordPress上创建壁纸相关的功能。 综上所述,这套源码资源为开发者提供了一个完整的壁纸小程序开发方案...

    响应式蓝色培训指导网站模板

    10. **内容管理系统**:虽然描述中没有提及,但一个好的培训指导网站可能集成了一款内容管理系统(CMS),如WordPress或Drupal,便于非技术人员更新和管理网站内容。 总之,“响应式蓝色培训指导网站模板”是一个...

Global site tag (gtag.js) - Google Analytics