多视图应用程序中,我们常常使用到自定义UINavigationBar来完成导航条的设置。 1.获取导航条 UINavigationBar *navBar = self.navigationController.navigationBar; 2.设置导航条样式(使用系统自带样式) [navBar setBarStyle:UIBarStyleDefault]; 分别有如下几种样式: typedef NS_ENUM(NSInteger, UIBarStyle) { UIBarStyleDefault = 0, UIBarStyleBlack = 1, UIBarStyleBlackOpaque = 1, // Deprecated. Use UIBarStyleBlack UIBarStyleBlackTranslucent = 2, // Deprecated. Use UIBarStyleBlack and set the translucent property to YES }; 从字面我们就能了解这4种样式的大概意思: 分别为: UIBarStyleDefault:默认样式 UIBarStyleBlack:黑色 UIBarStyleBlackOpaque:黑色不透明 UIBarStyleBlackTranslucent:黑色透明 注意:我们发现,在后面两个标记为Deprecated,我们知道使用后面两种将不被提倡。 从枚举中,我们也可以看出:UIBarStyleBlack=1和UIBarStyleBlackOpaque=1表示为一样的。 后来,发现增加了一个方法:[navBar setTranslucent:YES];用来指示是否透明。 所以,我们使用UIBarStyleDefault和UIBarStyleBlack来定义UINavigationBar样式,并且用setTranslucent:方法来设置透明与否。 3.自定义导航条颜色 如果,仅仅使用这4种(2种样式*是否透明),难免太逊了,必须能自定义UINavigationBar样式啊。 if ([navBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)]){ // UIBarMetricsLandscapePhone [navBar setBackgroundImage:[UIImage imageNamed:@"图片名称"] forBarMetrics:UIBarMetricsDefault]; } setBackgroundImage方法的第二个参数,需要解释一下: UIBarMetricsDefault:用竖着(拿手机)时UINavigationBar的标准的尺寸来显示UINavigationBar UIBarMetricsLandscapePhone:用横着时UINavigationBar的标准尺寸来显示UINavigationBar 希望对您有所帮助!
http://blog.sina.com.cn/s/blog_7b9d64af01019zsi.html
不说,先给出示例代码。首先,说明一下,我这个例子里面的观察者观察了两个事件(被观察者)
报纸观察员和电视观察员。
1、报纸观察员(当publish方法被调用,观察员负责通知所有观察了他的人,告诉他们有新报纸)
package com.gzmu.observer.observable;
import java.util.Observable;
public class Publisher extends Observable {
private String magazineName;
public String getMagazineName() {
return magazineName;
}
public void publish(String magazineName) {
this.magazineName = magazineName;
setChanged();
notifyObservers(this);
}
}
2、电视观察员当(play方法被调用,观察员负责通知所有观察了他的人,告诉他们有新电视)
package com.gzmu.observer.observable;
import java.util.Observable;
public class TVStation extends Observable {
private String programmeName;
public void play(String programmeName) {
this.programmeName = programmeName;
setChanged();
notifyObservers(this);
}
public String getProgrammeName() {
return programmeName;
}
}
3、用户(观察者)
package com.gzmu.observer.observer;
import java.util.Observable;
import java.util.Observer;
import com.gzmu.observer.observable.Publisher;
import com.gzmu.observer.observable.TVStation;
public class Reader implements Observer {
@Override
public void update(Observable o, Object arg) {
if (o instanceof Publisher) {
Publisher p = (Publisher) o;
System.out.println("我要订阅" + p.getMagazineName());
}
if (o instanceof TVStation) {
TVStation t = (TVStation) o;
System.out.println("我要收看" + t.getProgrammeName());
}
}
}
4、测试代码
package com.gzmu.observer.test;
import org.junit.Test;
import com.gzmu.observer.observable.Publisher;
import com.gzmu.observer.observable.TVStation;
import com.gzmu.observer.observer.Reader;
public class TestCase {
@Test
public void register() {
Reader reader = new Reader();
Publisher publisher = new Publisher();
publisher.addObserver(reader);
TVStation tvStation = new TVStation();
tvStation.addObserver(reader);
publisher.publish("Kent.Kwan的技术空间");
tvStation.play("色戒");
}
}
说说我对观察者模式的理解。从事例开始说。我觉得最核心的就是Observable这个类。
Observable里面有一个Observer类型的数组,数组里面每个元素就是我们添加的参与
观察的对象,比如Person(实现Observer接口)。只要Observable调用了setChanged, 状态
位就会被置为true,这时候,再调用notifyObservers()就会遍历数组,然后逐个对每个observer
对象调用update方法(代码见下面),于是我们自己写的update方法(如Person里的update)
就会被调用,这里面用到了回调的方法。
分析java源代码:
package java.util;
public class Observable {
private boolean changed = false;
private Vector obs;
public Observable() {
obs = new Vector();
}
public synchronized void addObserver(Observer o) {
if (o == null)
throw new NullPointerException();
if (!obs.contains(o)) {
obs.addElement(o);
}
}
public synchronized void deleteObserver(Observer o) {
obs.removeElement(o);
}
public void notifyObservers() {
notifyObservers(null);
}
public void notifyObservers(Object arg) {
Object[] arrLocal;
if (!changed)
return;
arrLocal = obs.toArray();
clearChanged();
}
for (int i = arrLocal.length-1; i>=0; i--)
((Observer)arrLocal[i]).update(this, arg);
}
public synchronized void deleteObservers() {
obs.removeAllElements();
}
protected synchronized void setChanged() {
changed = true;
}
protected synchronized void clearChanged() {
changed = false;
}
public synchronized boolean hasChanged() {
return changed;
}
public synchronized int countObservers() {
return obs.size();
}
}
有时候我们需要在list中的每一项上添加上缩略图,这时候我们就可以直接插入一个img标签,jquerymobile会为我们自动渲染成带缩略图的。下面看一个例子代码:
<!DOCTYPE html> <html> <head> <title>Thumbnail Example</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="http://code.jquery.com/mobile/latest/jquery.mobile.min.css" /> <script src="http://code.jquery.com/jquery-1.7.1.min.js"></script> <script src="http://code.jquery.com/mobile/latest/jquery.mobile.min.js"></script> </head> <body> <div data-role="page"> <div data-role="header"> <h1>My Header</h1> </div> <div data-role="content"> <ul data-role="listview" data-inset="true"> <li><img src="/blog_article/ray.png"> Raymond Camden</li><!--这行没有使用A标签所以后面不会有一个小箭头,其他的都有--> <li><a href="/blog_article/scott.html"><img src="/blog_article/scott.png"> Scott Stroz</a></li> <li><a href="/blog_article/todd.html"><img src="/blog_article/todd.png"> Todd Sharp</a></li> <li><a href="/blog_article/dave.html"><img src="/blog_article/dave.png"> Dave Ferguson</a></li> </ul> </div> <div data-role="footer"> <h4>My Footer</h4> </div> </div> </body> </html>
效果如下:
第一项没有小箭头在代码中注释中有解释。
看到这个总是感觉这几个人的头像有点大了,我们只需要比较小的就可以了。这时候可以使用jquerymobile提供的一个CSS类ui-li-icon,在每个img标签中添加上这个类就可以了。修改后代码如下:
<!DOCTYPE html> <html> <head> <title>Thumbnail Example</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="http://code.jquery.com/mobile/latest/jquery.mobile.min.css" /> <script src="http://code.jquery.com/jquery-1.7.1.min.js"></script> <script src="http://code.jquery.com/mobile/latest/jquery.mobile.min.js"></script> </head> <body> <div data-role="page"> <div data-role="header"> <h1>My Header</h1> </div> <div data-role="content"> <ul data-role="listview" data-inset="true"> <li><img src="/blog_article/ray_small.png" > Raymond Camden</li> <li><a href="/blog_article/scott.html"><img src="/blog_article/scott_small.png" > Scott Stroz</a></li> <li><a href="/blog_article/todd.html"><img src="/blog_article/todd_small.png" > Todd Sharp</a></li> <li><a href="/blog_article/dave.html"><img src="/blog_article/dave_small.png" > Dave Ferguson</a></li> </ul> </div> <div data-role="footer"> <h4>My Footer</h4> </div> </div> </body> </html>
效果如下:
很简单的两个知识点。如果哪里写错了,还请指出。